Here's an example of overriding Resalver Dependency SignalR using StructureMap. In this particular example, I go over to the camelCase properties and convert the enumerations as strings.
At startup:
Microsoft.AspNet.SignalR.GlobalHost.DependencyResolver = new StructureMapSignalRDependencyResolver();
Here's the class:
public class StructureMapSignalRDependencyResolver : Microsoft.AspNet.SignalR.DefaultDependencyResolver { public override object GetService(Type serviceType) { object service; if (!serviceType.IsAbstract && !serviceType.IsInterface && serviceType.IsClass) { // Concrete type resolution service = StructureMap.ObjectFactory.GetInstance(serviceType); } else { // Other type resolution with base fallback service = StructureMap.ObjectFactory.TryGetInstance(serviceType) ?? base.GetService(serviceType); } return service; } public override IEnumerable<object> GetServices(Type serviceType) { var objects = StructureMap.ObjectFactory.GetAllInstances(serviceType).Cast<object>(); return objects.Concat(base.GetServices(serviceType)); } }
And StructureMap was configured with:
ObjectFactory.Configure(c => { c.Scan(a => {
Here is the Contract Resolution:
public class SignalRContractResolver : Newtonsoft.Json.Serialization.IContractResolver { private readonly Assembly _assembly; private readonly Newtonsoft.Json.Serialization.IContractResolver _camelCaseContractResolver; private readonly Newtonsoft.Json.Serialization.IContractResolver _defaultContractSerializer; public SignalRContractResolver() { _defaultContractSerializer = new Newtonsoft.Json.Serialization.DefaultContractResolver(); _camelCaseContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver(); _assembly = typeof(Connection).Assembly; } public Newtonsoft.Json.Serialization.JsonContract ResolveContract(Type type) { if (type.Assembly.Equals(_assembly)) { return _defaultContractSerializer.ResolveContract(type); } return _camelCaseContractResolver.ResolveContract(type); } }
source share