Unity构造函数注入具有不同的值

时间:2014-06-13 14:52:50

标签: c# .net dependency-injection unity-container

我有一个队列类,Queue实现了IQueue。 但是我有不同的环境,比如Prod和UAT(并且需要同时使用它们)。 Queue类接受一些不同的配置,每个环境都不同。

我知道如何连接IQueue的构造函数,但不知道最好的方法是什么,我可以获得不同的构造函数值。

container.RegisterType<IQueue<>, Queue>(new PerThreadLifetimeManager(),
            new InjectionConstructor(_serverAddress);

通过上述内容,它指定了用于Queue构造函数的服务器地址。

问题是我需要队列的两个实例,比如一个为Prod配置的队列和另一个为UAT配置的队列,它们具有不同的服务器地址,在另一个类中用作依赖项,例如:

 PackageController(IQueueProd prodQueue, IQueueUAT uatQueue)

我是否必须创建不同的接口才能连接不同的构造函数?这是最好的方法吗?

1 个答案:

答案 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