gpt4 book ai didi

unity-container - 为 SignalR 创建一个 Unity DependencyResolver

转载 作者:行者123 更新时间:2023-12-02 00:20:00 26 4
gpt4 key购买 nike

我使用的是 SignalR 0.5.2,我正在尝试使用 Unity 设置 DependencyResolver。我已经写了我能写的最简单的代码。我有一个集线器,我正尝试将其注入(inject)其中,如下所示:

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 接口(interface)。

我也尝试过将解析器传递给 MapHubs,但仍然没有成功。我也尝试过使用 [Dependency] 属性进行属性注入(inject),但也没有用。

我是否也需要向 MVC 注册解析器? (我已经尝试通过实现两个 IDependecyResolver 接口(interface)来实现,但是得到一个异常告诉我解析器没有实现 IServiceLocator)

最佳答案

所以我已经解决了这个问题。我想知道是否是 Hub 已注册到 signalr 容器并且接口(interface)已注册到 Unity 容器这一事实导致了这个问题。所以我用 Unity 注册了 Hub,然后一切正常。

由于有两个容器,所以这是有道理的。

这是标准行为吗?

关于unity-container - 为 SignalR 创建一个 Unity DependencyResolver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11358147/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com