Я думал, что использование моего собственного IoC будет довольно прямым с SignalR, и, возможно, это так; скорее всего, я делаю что-то неправильно. Вот мой код, который у меня есть до сих пор:
private static void InitializeContainer(Container container)
{
container.Register<IMongoHelper<UserDocument>, MongoHelper<UserDocument>>();
// ... registrations like about and then:
var resolver = new SimpleInjectorResolver(container);
GlobalHost.DependencyResolver = resolver;
}
а затем мой класс:
public class SimpleInjectorResolver : DefaultDependencyResolver
{
private Container _container;
public SimpleInjectorResolver(Container container)
{
_container = container;
}
public override object GetService(Type serviceType)
{
return _container.GetInstance(serviceType) ?? base.GetService(serviceType);
}
public override IEnumerable<object> GetServices(Type serviceType)
{
return _container.GetAllInstances(serviceType) ?? base.GetServices(serviceType);
}
}
В результате я получаю сообщение об ошибке, что IJavaScriptProxyGenerator не может быть разрешен, поэтому я думаю, что я добавлю регистрацию:
container.Register<IJavaScriptProxyGenerator, DefaultJavaScriptProxyGenerator>(
ConstructorSelector.MostParameters);
но тогда есть куча других! Я добираюсь до:
container.Register<IDependencyResolver, SimpleInjectorResolver>();
container.Register<IJavaScriptMinifier, NullJavaScriptMinifier>();
container.Register<IJavaScriptProxyGenerator, DefaultJavaScriptProxyGenerator>(
ConstructorSelector.MostParameters);
container.Register<IHubManager, DefaultHubManager>();
container.Register<IHubActivator, DefaultHubActivator>();
container.Register<IParameterResolver, DefaultParameterResolver>();
container.Register<IMessageBus, InProcessMessageBus>(ConstructorSelector.MostParameters);
Что еще дает мне "Никакая регистрация для типа ITraceManager
не найдена".... но теперь мне интересно, правильно ли я это делаю, поскольку я надеюсь, что мне не понадобится перезаписывать все, что делает SignalR... правильно? С надеждой? Если нет, я буду продолжать тащиться, но я - SignalR и Simple Injector newb, поэтому подумал, что сначала спрошу.:)
Дополнительно: https://cuttingedge.it/blogs/steven/pivot/entry.php?id=88, поскольку SignalR имеет несколько конструкторов.