首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >与Ninject的WhenInjectedInto()等价物

与Ninject的WhenInjectedInto()等价物
EN

Stack Overflow用户
提问于 2011-10-06 01:00:19
回答 1查看 2.8K关注 0票数 22

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

我们的MVC应用程序中有一些控制器,它们只需要一个具体的ISession实现,这取决于它们被注入到哪个控制器中。例如:

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

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

提前感谢大家的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-06 02:47:45

使用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。

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7664912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档