用不同的值注入统一构造函数

本文关键字:构造函数 注入 | 更新日期: 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