使用带有SignalR简单的喷油器 [英] Using Simple Injector with SignalR
问题描述
我想用我自己的IoC是pretty向前伸直与SignalR,也许它;最有可能的,我做错了什么。这里是我的code我到目前为止有:
I thought using my own IoC would be pretty straight forward with SignalR and maybe it is; most likely I'm doing something wrong. Here's my code I have so far:
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解决不了的,所以我觉得,嗯,我会添加注册:
What ends up happening is I get an error that IJavaScriptProxyGenerator can't be resolved, so I think, well I'll add the registration:
container.Register<IJavaScriptProxyGenerator, DefaultJavaScriptProxyGenerator>(
ConstructorSelector.MostParameters);
但后来有一堆别人的!我到:
but then there are a bunch of others! I get to:
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和简单的注射器福利局所以想我会先问。 :)
Which still gives me "No registration for type ITraceManager
could be found." ... but now I'm wondering if I'm doing this right at all as I hoping I wouldn't need to re-wire everything SignalR is doing...right? Hopefully? If not I'll keep trudging along but I'm a SignalR and Simple Injector newb so thought I'd ask first. :)
其他: https://cuttingedge.it/blogs/steven/枢轴/ entry.php?ID = 88 因为SignalR有多个构造函数。
Additional: https://cuttingedge.it/blogs/steven/pivot/entry.php?id=88 since SignalR had multiple constructors.
推荐答案
好吧,我昨天试了,我已经找到了解决办法。
据我,在这里我想在SignalR依赖注入的唯一时刻是我集线器:我不关心SignalR是如何工作的里面!
因此,而不是替换DependencyResolver,我创建了自己的实现IHubActivator的:
Well, I tried yesterday and I've found a solution. According to me, the only moment where I want dependency injection in SignalR is for my hubs: I don't care about how SignalR is working inside ! So instead of replacing the DependencyResolver, I created my own implementation of IHubActivator :
public class SimpleInjectorHubActivator : IHubActivator
{
private readonly Container _container;
public SimpleInjectorHubActivator(Container container)
{
_container = container;
}
public IHub Create(HubDescriptor descriptor)
{
return (IHub)_container.GetInstance(descriptor.HubType);
}
}
这是我可以这样注册(在的Application_Start):
That I can register like this (in Application_Start) :
var activator = new SimpleInjectorHubActivator(container);
GlobalHost.DependencyResolver.Register(typeof(IHubActivator), () => activator);
RouteTable.Routes.MapHubs();
这篇关于使用带有SignalR简单的喷油器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!