Unity – 如何将多个映射用于相同类型并注入对象

我正在使用Unity 2.0,在下面的代码中我试图在Worker对象中注入一个特定的工具。

我想使用以下代码。 但是当然有一个错误“依赖的解决方案失败了”。 我相信我应该可以做这样的事情,但我很难搞清楚。

IUnityContainer container = new UnityContainer(); container.RegisterType("Worker") .RegisterType("ToolA") .RegisterType("ToolB") .RegisterType("ToolC"); IWorker worker = container.Resolve("ToolA"); 

我知道这不起作用,但我该如何解决这个问题呢?

BarDev

有两种方法可以实现这一目标:

您可以使用ParameterOverride和两步解析过程……

 var tool = container.Resolve("ToolB"); var worker = container.Resolve("Worker", new ParameterOverride("tool", tool)); 

…假设接收ITool Worker上的构造函数参数称为“工具”(多个ParameterOverride实例可以传递给Resolve )。 应该正确解析IWorker的命名实例所具有的任何其他依赖项(通过构造函数或属性注入)。

或者,为什么不设置需要指定ITool名为WorkerA, WorkerB, WorkerC实例…

 container.RegisterType("ToolA"); container.RegisterType("ToolB"); container.RegisterType("ToolC"); container.RegisterType("WorkerA", new InjectionConstructor(new ResolvedParameter("ToolA"))); container.RegisterType("WorkerB", new InjectionConstructor(new ResolvedParameter("ToolB"))); container.RegisterType("WorkerC", new InjectionConstructor(new ResolvedParameter("ToolC"))); 

我认为使用后一种方法的缺点是,如果Worker需要额外的构造函数参数,您还需要将它们指定给InjectionConstructor ,并按照与您期望Unity使用的构造函数相同的顺序指定…

 container.RegisterType("WorkerA", new InjectionConstructor(typeof(SomeDependency), new ResolvedParameter("ToolA"), typeof(SomeOtherDependency)); 

但是,Unity将在上面的示例中查找SomeDependencySomeOtherDependency的非命名实例,以便为您节省一些工作。