Asp.net-Mvc-3
Autofac 相當於 Ninject 的 WhenInjectedInto()
因此,我們正在努力將工作中的一些項目從 Ninject 轉換為 Autofac,我們偶然發現了 Ninject 中一些非常簡潔的東西,我們無法弄清楚如何在 Autofac 中進行操作。在我們的應用程序中,我們有一個名為的介面
ISession,它以兩種不同的具體類型實現。一個用於 Oracle 數據庫,另一個用於 MS-SQL 數據庫。我們的 MVC 應用程序中有控制器,它們只需要一個 ISession 的具體實現,具體實現取決於它們被注入到哪個控制器。例如:
Bind<IFoo>().To<Foo1>(); Bind<IFoo>().To<Foo2>().WhenInjectedInto<OracleController>();我的問題是:我們如何在 Autofac 中獲得相同的結果?當
IFoo被注入任何控制器時,Foo1應該預設提供,但是在一種特殊情況下,我們需要Foo2。提前感謝您的幫助!
使用 Autofac,您可以通過相反的方式進行註冊來實現這一點。因此,您應該在註冊 OracleController 時聲明要使用“speciel”服務,而不是在註冊 IFoo 時。
containerBuilder.RegisterType<Foo1>().As<IFoo>(); containerBuilder.RegisterType<Foo2>().Named<IFoo>("oracle"); containerBuilder.RegisterType<OracleController>().WithParameter(ResolvedParameter.ForNamed<IFoo>("oracle"));命名註冊“oracle”確保預設的 IFoo 實例將是 Foo1 並且只有當您通過名稱顯式請求它時才會獲得 Foo2。