2013-10-27 22 views
1

我試圖讓SignalR,MEF和MVC一起工作。SignalR,MEF和依賴注入一起工作

這裏是我的解析器類:

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); 
    } 
} 

我可以打破啓動類,並看到容器不包括我的出口。但是,Visual Studio中的提示用一個例外:如果我不把我的自定義依賴解析器和新建了我的集線器類的內部依賴

Unhandled exception at line 244, column 13 in http://localhost:3928/Scripts/jquery.signalR-2.0.0.js

0x800a139e - JavaScript runtime error: SignalR: Error loading hubs. Ensure your hubs reference is correct, e.g. .

的應用程序工作正常。

我從本教程如下:http://www.asp.net/signalr/overview/signalr-20/extensibility/dependency-injection

任何想法,爲什麼這是不工作?

回答

2

當您沒有服務時,您需要調用基本實現。

+0

謝謝,它現在有效。我想我的後續問題將是爲什麼我必須在hub類上添加一個導出屬性,以便我的導入功能得到補充?當解析器看起來像集線器類並且看到一個需要導入的屬性時,是否應該這樣做? –

+0

你需要問MEF的設計者那個問題。 – davidfowl