我正在使用 SignalR 0.5.2,并且正在尝试使用 Unity 设置 DependencyResolver。我已经写了我能写的最简单的代码。我有一个正在尝试注入的集线器,如下所示:
public class SimpleHub : Hub
{
private readonly ITestService _service;
public SimpleHub(ITestService service)
{
_service = service;
}
public void Update()
{
Clients.callback("Kevin");
}
}
和一个看起来像这样的 DependencyResolver:
public class UnityDependencyResolver : DefaultDependencyResolver
{
private readonly IUnityContainer _container;
public UnityDependencyResolver(IUnityContainer container)
{
_container = container;
}
public override object GetService(Type serviceType)
{
if (_container.IsRegistered(serviceType))
{
return _container.Resolve(serviceType);
}
return base.GetService(serviceType);
}
public override IEnumerable<object> GetServices(Type serviceType)
{
if (_container.IsRegistered(serviceType))
{
return _container.ResolveAll(serviceType);
}
return base.GetServices(serviceType);
}
}
我在 Global.asax 中注册了依赖解析器
protected void Application_Start()
{
IUnityContainer container = new UnityContainer();
InitializeContainer(container);
SignalR.IDependencyResolver resolver = new UnityDependencyResolver(container);
GlobalHost.DependencyResolver = resolver;
RouteTable.Routes.MapHubs();
// more MVC stuff here
}
其中 InitializeContainer 在 Unity 中注册 ITestService
解析器“工作”,因为它被所有 SignalR 类型调用,如果我离开我的集线器有一个默认构造函数,它都会被加载。但是,解析器永远不会被要求解析 ITestService 接口。
我也尝试将解析器传递给 MapHubs,但仍然没有运气。我也尝试过使用 [Dependency] 属性进行属性注入,但也没有用。
我是否也需要向 MVC 注册解析器?(我已经尝试通过实现两个 IDependecyResolver 接口但得到一个异常告诉我解析器没有实现 IServiceLocator)