Autofac 相当于 Ninject 的 WhenInjectedInto()



我们正在将一些工作中的项目从Ninject转换为Autofac,我们偶然发现了一些在Ninject中非常简洁的东西,我们不知道如何在Autofac中做。在我们的应用程序中,我们有一个名为ISession的接口,它以两种不同的具体类型实现。一个到Oracle数据库,另一个到MS-SQL数据库。

我们的MVC应用程序中的控制器只需要一个基于被注入到哪个控制器的session的具体实现。例如:

Bind<IFoo>().To<Foo1>();
Bind<IFoo>().To<Foo2>().WhenInjectedInto<OracleController>();

我的问题是:我们如何在Autofac中实现相同的结果?当IFoo注入任何控制器时,默认提供Foo1,但在一种特殊情况下,我们需要Foo2

提前感谢您的帮助!

使用autofacc,您可以通过另一种方式进行注册来实现这一点。所以你应该声明你想在注册OracleController时使用"special"服务,而不是在注册IFoo时。

containerBuilder.RegisterType<Foo1>().As<IFoo>();
containerBuilder.RegisterType<Foo2>().Named<IFoo>("oracle");
containerBuilder.RegisterType<OracleController>().WithParameter(ResolvedParameter.ForNamed<IFoo>("oracle"));

命名注册"oracle"确保默认的IFoo实例将是Foo1,并且只有当您通过名称显式请求它时才能获得Foo2。

相关内容

  • 没有找到相关文章

最新更新