用不同的值注入统一构造函数
本文关键字:构造函数 注入 | 更新日期: 2023-09-27 18:08:26
我有一个queue类queue实现IQueue。然而,我有不同的环境,如Prod和UAT(需要同时使用它们)。Queue类接受一些配置,这些配置在每个环境中都是不同的。
我知道如何连接IQueue的构造函数,但不知道最好的方法是什么,所以我可以得到不同的构造函数值。
container.RegisterType<IQueue<>, Queue>(new PerThreadLifetimeManager(),
new InjectionConstructor(_serverAddress);
通过上面的代码,它指定了一个用于Queue构造函数的服务器地址。
问题是我需要队列的两个实例,说队列已配置为Prod和另一个为UAT,它们具有不同的服务器地址,这被用作另一个类中的依赖项例如:
PackageController(IQueueProd prodQueue, IQueueUAT uatQueue)
我是否必须创建不同的接口才能连接不同的构造函数?最好的方法是什么?
解决方案之一是使用命名注册,即
container.RegisterType<IQueue, Queue>("Prod", new InjectionConstructor(_prodServerAddress));
container.RegisterType<IQueue, Queue>("UAT", new InjectionConstructor(_uatServerAddress));
container.RegisterType<PackageController>(
new InjectionConstructor(new ResolvedParameter<IQueue>("Prod"),
new ResolvedParameter<IQueue>("UAT")));
这注册了IQueue
接口的两个类型映射,一个用于Prod,一个用于UAT,这也为PackageController
注册了一个类型映射,它将注入Prod IQueue
和UAT IQueue
。