Asp.net-Mvc-3

Autofac 相當於 Ninject 的 WhenInjectedInto()

  • October 5, 2011

因此,我們正在努力將工作中的一些項目從 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。

引用自:https://stackoverflow.com/questions/7664912