2012-06-15 89 views
4

我有一個分層的Web應用程序,我用ASP.NET MVC 4,WebAPI和其他一些組件構建。我使用最新版本的Autofac 2.6.2.859作爲我的DI容器以及MVC和WebAPI集成。我在不同的圖層中設置了autofac模塊,並且我使用新的RegisterAssemblyModule來掃描各個模塊的AppDomain程序集。Autofac在Web.Config上丟失註冊編輯

在啓動時,每件作品都很棒。當我編輯web.config文件並且應用程序變暖時,我的註冊信息將丟失。我得到一個DependencyResolutionException -

建設者沒有發現與類型「My.Class.Name」公共綁定標誌「可以與提供的服務和參數來調用:

所以我註冊沒有被重新加載。有誰知道如何解決這個問題?我應該把我的初始化代碼放在Application_Start()以外的其他地方嗎?

UPDATE

這裏是我的代碼是什麼樣子

public static class IoC 
{ 
    public static void Configure() 
    { 
     var builder = new ContainerBuilder(); 
     var assemblies = AppDomain.CurrentDomain.GetAssemblies(); 

     //Assembly Modules    
     builder.RegisterAssemblyModules<NSUTriviaModuleBase>(assemblies); 

     // Register API controllers using assembly scanning. 
     builder.RegisterControllers(assemblies); 

     // Register API controllers using assembly scanning. 
     builder.RegisterApiControllers(assemblies); 

     var container = builder.Build(); 
     // Set the dependency resolver implementation. 
     var resolver = new AutofacWebApiDependencyResolver(container); 

     GlobalConfiguration.Configuration.DependencyResolver = resolver; 
     DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 
    } 
} 
+0

有趣 - 您是否在調試時運行此操作,例如:在卡西尼或IIS Express中,或者你正在做什麼? :) –

+0

它在具有IIS 6和.NET 4.0的遠程登臺服務器上以調試模式運行。它在本地IIS 7.5 Express上正常工作。只有在有回收的情況下才會出現錯誤。 – cecilphillip

+0

您是否可以設置任何跟蹤/日誌記錄來檢查錯誤發生時DependencyResolvers的狀態?他們是否仍然是Autofac的? –

回答

8

我認爲這個問題是所有組件加載到AppDomain中第一個啓動的應用程序時,但是當AppDomain中被回收IIS程序集只能按需加載。

嘗試使用GetReferencedAssemblies方法System.Web.Compilation.BuildManager來獲取引用程序集的列表。

var assemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>(); 

這應該強制引用的程序集立即加載到AppDomain中,使它們可用於模塊掃描。