我有一个队列类,Queue实现了IQueue。 但是我有不同的环境,比如Prod和UAT(并且需要同时使用它们)。 Queue类接受一些不同的配置,每个环境都不同。
我知道如何连接IQueue的构造函数,但不知道最好的方法是什么,我可以获得不同的构造函数值。
container.RegisterType<IQueue<>, Queue>(new PerThreadLifetimeManager(),
new InjectionConstructor(_serverAddress);
通过上述内容,它指定了用于Queue构造函数的服务器地址。
问题是我需要队列的两个实例,比如一个为Prod配置的队列和另一个为UAT配置的队列,它们具有不同的服务器地址,在另一个类中用作依赖项,例如:
PackageController(IQueueProd prodQueue, IQueueUAT uatQueue)
我是否必须创建不同的接口才能连接不同的构造函数?这是最好的方法吗?
答案 0 :(得分:0)
对此的一个解决方案是使用命名注册,即
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
。