gpt4 book ai didi

asp.net-mvc-3 - Autofac 相当于 Ninject 的 WhenInjectedInto()

转载 作者:行者123 更新时间:2023-12-01 19:15:29 38 4
gpt4 key购买 nike

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

我们的 MVC 应用程序中的 Controller 只需要一个 ISession 的具体实现(基于它们要注入(inject)的 Controller )。例如:

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

我的问题是:我们如何在 Autofac 中获得相同的结果?当将 IFoo 注入(inject)任何 Controller 时,默认情况下应提供 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。

关于asp.net-mvc-3 - Autofac 相当于 Ninject 的 WhenInjectedInto(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7664912/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com