2016-03-03 61 views
0

我有一個簡單的AutoFac示例工作,但現在想要將其應用於我的web api項目並在圖層之間有正確的分隔。AutoFac MVC Web API

我看到的問題是標準的控制器x「不具有默認構造函數」,但我難倒以便在徵求意見..

我打電話RegisterApiControllers以及RegisterControllers ..

這就是我在我的DependencyInjectionContainer

public static class DependencyInjectionContainer 
{ 
    public static ContainerBuilder Builder; 
    public static IContainer Container; 

    public static void Init(Assembly mainAssembly) 
    { 
     Builder = new ContainerBuilder(); 
     var config = GlobalConfiguration.Configuration; 

     RegisterTypes(mainAssembly); 

     Container = Builder.Build(); 

     config.DependencyResolver = new AutofacWebApiDependencyResolver(Container); 
     DependencyResolver.SetResolver(new AutofacDependencyResolver(Container)); 
    } 

    private static void RegisterTypes(Assembly mainAssembly) 
    { 
     var roomBookingConnectionString = ConfigurationManager.ConnectionStrings["RoomBooking"].ConnectionString; 

     Builder.RegisterControllers(mainAssembly); 

     Builder.RegisterType<RoomRepository>().As<IRoomRepository>().WithParameter(new TypedParameter(typeof(string), roomBookingConnectionString)); 
     Builder.RegisterType<RoomService>().As<IRoomService>(); 

     Builder.RegisterApiControllers(mainAssembly); 

     Builder.RegisterFilterProvider(); 
    } 
} 

我在我的Global.asax.cs

調用此3210

這裏的一個大的假設是,這是正確的...

Builder.RegisterApiControllers(mainAssembly); 

編輯-------------------------- -------------------------------------------

我剛纔嘗試將上述兩種方法中的所有DI註冊等都移回到global.asax.cs中,並且它可以工作!?!?

我認爲它與'RegisterApiControllers'有關。我使用'typeof(MvcApplication).Assembly'將調用程序集傳遞給上述init方法。這有什麼問題嗎?

謝謝。

+0

我想我有這個工作。我不確定,但我認爲這是因爲我有一個名爲「DependencyInjection」的類,它與某些其他方面有衝突嗎? –

回答

0

Autofac使用RegisterApiControllers方法來定位控制器。

當你這樣做Builder.RegisterApiControllers(mainAssembly);你確定mainAssembly參數是包含控制器的程序集嗎?

無論如何,如果你有這樣那樣的問題,你可以做這樣的事情(猜測你有一個名爲RoomBookingController控制器):

builder.RegisterApiControllers(typeof(RoomBookingController).Assembly); 

這樣Autofac將找到包含你的控制器總成,不管它在哪裏。