【问题标题】:Creating a Unity DependencyResolver for SignalR为 SignalR 创建 Unity DependencyResolver
【发布时间】:2012-07-06 07:57:32
【问题描述】:

我正在使用 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)

【问题讨论】:

    标签: unity-container signalr


    【解决方案1】:

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

    这是有道理的,因为有两个容器。

    这是标准行为吗?

    【讨论】:

    【解决方案2】:

    如果其他人想知道...我找到了一个很好的 SPA 示例,它使用了

    • SignalR 1.0.1
    • 团结3
    • 一堆其他框架

    有趣的是他创建容器、依赖项和其他所有内容的方式。值得checking it out

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      • 2016-05-18
      • 1970-01-01
      • 2017-08-05
      相关资源
      最近更新 更多