2012-12-10 160 views
1

我有一個DevExpress示例mvc網站應用程序。它使用溫莎城堡作爲國際奧委會。我只是試圖通過Autofac取代,但沒有運氣!溫莎城堡到Autofac

這裏是示例代碼:

container 
    .Register(Component 
     .For<DbRepositories.ClinicalStudyContext>() 
     .LifestylePerWebRequest() 
     .DependsOn(new { connectionString })) 
    .Register(Component 
     .For<DbRepositories.IClinicalStudyContextFactory>() 
     .AsFactory()) 
    .Register(Component 
     .For<FirstStartInitializer>() 
     .LifestyleTransient()) 
    .Register(Component 
     .For<IUserRepository>() 
     .ImplementedBy<DbRepositories.UserRepository>()) 

,這是我Autofac轉換:

var builder = new ContainerBuilder(); 

builder.RegisterControllers(typeof(MvcApplication).Assembly); 

builder.Register(c => 
    new DbRepositories.AdminContext(connectionString)) 
    .InstancePerHttpRequest(); 

builder.RegisterType<DbRepositories.IAdminContextFactory>() 
    .As<DbRepositories.IAdminContextFactory>(); 

builder.RegisterType<DbRepositories.UserRepository>() 
    .As<IUserRepository>().InstancePerHttpRequest(); 

有關於我的研究沒有對implementetion AsFactory()上Autofac。

這是IAdminContextFactory接口:

public interface IAdminContextFactory 
{ 
    AdminContext Retrieve(); 
} 

,這是錯誤的應用說:

的類型 'Admin.Infrastructure.EFRepository.IAdminContextFactory' 可以發現 有沒有構造函數'公共綁定標誌'。

任何人都可以幫忙嗎?

謝謝。

回答

2

您的IAdminContextFactory註冊將失敗,因爲RegisterType的第一部分必須是服務類型。在這種情況下,一個類實現了IAdminContextFactory接口。 Autofac會嘗試構建一個類型的實例,這肯定會失敗,因爲你不能實例化一個接口。

因此,你需要的是IAdminContextFactory接口的執行。城堡AsFactory方法爲您生成此實現。您可以通過額外的the Autofac AggregateService獲得此行爲。

到位後位,你可以這樣做:

builder.RegisterAggregateService<IAdminContextFactory>(); 
+0

感謝您的答覆。我會盡力讓你知道。 – shortcode

+0

它的工作原理。謝謝彼得。 – shortcode

+1

@shortcode - 當然它的作品! ;)...沒有真的,很高興成爲協助:) –