SignalR,MEF和依赖注入协同工作

时间:2013-10-27 03:57:22

标签: model-view-controller dependency-injection signalr mef

我正在努力让SignalR,MEF和MVC一起工作。

这是我的解析器类:

public class SignalRDependencyResolver : DefaultDependencyResolver
{
    private readonly CompositionContainer _container;

    public SignalRDependencyResolver(CompositionContainer container)
    {
        _container = container;
    }

    public override object GetService(Type serviceType)
    {
        if (serviceType == null)
        {
            throw new ArgumentNullException("serviceType");
        }

        var name = AttributedModelServices.GetContractName(serviceType);
        var export = _container.GetExportedValueOrDefault<object>(name);
        return export;
    }

    public override IEnumerable<object> GetServices(Type serviceType)
    {
        if (serviceType == null)
        {
            throw new ArgumentNullException("serviceType");
        }

        var exports = _container.GetExportedValues<object>(AttributedModelServices.GetContractName(serviceType));
        return exports;
    }
}

这是我的Owin创业公司:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        var resolver = new SignalRDependencyResolver(MefConfigWeb.Container);
        var config = new HubConfiguration
        {
            Resolver = resolver,
        };

        app.MapSignalR(config);
    }
}

我可以打破Startup类,看到容器确实包含了我的导出。但是,Visual Studio会提示异常:

  

第244栏第244行未处理的例外情况   http://localhost:3928/Scripts/jquery.signalR-2.0.0.js

     

0x800a139e - JavaScript运行时错误:SignalR:加载集线器时出错。   确保您的集线器引用正确,例如

如果我没有在Hub类中设置我的自定义依赖项解析器和New up我的依赖项,该应用程序可以正常工作。

我正在跟进本教程:http://www.asp.net/signalr/overview/signalr-20/extensibility/dependency-injection

为什么这不起作用?

1 个答案:

答案 0 :(得分:2)

您需要在没有服务时调用基本实现。