我有一個現有的使用Autofac的MVC 4應用程序,並且我有其他具有autofac模塊的程序集。如果沒有SignalR/autofac集成,我的應用程序就IOC而言完美無缺。我在SignalR集線器中添加了我試圖通過構造函數注入依賴關係的信息。我遵循文檔並實施了代碼示例。Autofac - 帶OWIN的SignalR。獲得對ContainerBuilder的參考
http://autofac.readthedocs.org/en/latest/integration/signalr.html
導致這下面的類:
public class SignalRConfig
{
public void Configuration(IAppBuilder app)
{
var builder = new ContainerBuilder();
var config = new HubConfiguration();
Assembly thisAssembly = typeof(SignalRConfig).Assembly;
builder.RegisterHubs(thisAssembly);
var container = builder.Build();
config.Resolver = new AutofacDependencyResolver(container);
app.UseAutofacMiddleware(container);
app.MapSignalR("/signalr", config);
}
}
這是迷上了這一行被添加到我的AssemblyInfo.cs
[assembly: OwinStartup(typeof(SignalRConfig))]
但在其不工作因爲我的集線器沒有無參數的構造函數,並且無法解析依賴關係。我的假設是我正在創建一個新的ContainerBuilder(按照文檔),並且此實例沒有任何註冊。我實際上需要引用我的模塊傳遞的ContainerBuilder,該模塊知道我所有的註冊類型。我只是不知道該怎麼做。現有的IOC代碼從global.asax上的application_start運行,並且SignalRConfig同時運行。我不想將ContainerBuilder放在單身中,因爲它感覺髒,但我找不到任何其他解決方案。
下面是該版本號的我的NuGet包配置的部分等
<package id="Autofac" version="3.5.2" targetFramework="net451" />
<package id="Autofac.Mvc4" version="3.1.0" targetFramework="net40" />
<package id="Autofac.Owin" version="3.1.0" targetFramework="net451" />
<package id="Autofac.SignalR" version="3.0.1" targetFramework="net451" />
<package id="Autofac.WebApi" version="3.1.0" targetFramework="net40" />
<package id="Microsoft.AspNet.Mvc" version="4.0.30506.0" targetFramework="net40" />
<package id="Microsoft.AspNet.Razor" version="2.0.30506.0" targetFramework="net40" />
<package id="Microsoft.AspNet.SignalR" version="2.2.0" targetFramework="net451" />
<package id="Microsoft.AspNet.SignalR.Core" version="2.2.0" targetFramework="net451" />
<package id="Microsoft.AspNet.SignalR.JS" version="2.2.0" targetFramework="net451" />
<package id="Microsoft.AspNet.SignalR.SystemWeb" version="2.2.0" targetFramework="net451" />
<package id="Microsoft.AspNet.WebApi" version="4.0.20710.0" targetFramework="net40" />
<package id="Microsoft.AspNet.WebApi.Client" version="4.0.30506.0" targetFramework="net40" />
<package id="Microsoft.AspNet.WebApi.Core" version="4.0.30506.0" targetFramework="net40" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="4.0.30506.0" targetFramework="net40" />
<package id="Microsoft.AspNet.WebPages" version="2.0.30506.0" targetFramework="net40" />
<package id="Microsoft.Owin" version="3.0.0" targetFramework="net451" />
<package id="Microsoft.Owin.Host.SystemWeb" version="2.1.0" targetFramework="net451" />
<package id="Microsoft.Owin.Security" version="3.0.0" targetFramework="net451" />
<package id="Owin" version="1.0" targetFramework="net451" />
感謝您的詳細解答。我會按照您的建議重構我的啓動代碼。 – RussellEast 2015-01-22 10:10:59
工作,謝謝 – RussellEast 2015-01-22 11:19:36