团结和代表

我正在使用Unitydependency injection框架。 我有两个类,每个类在构造函数中使用相同的delegate参数。 解决后,每个类应该获得不同的方法。 我可以不使用属性进行设置吗? 如果不是,你会如何使用属性?

是的,您可以使用[Dependency]属性修饰属性或构造函数参数。

这个例子不使用委托,它只是使用一个接口,但是它显示了两个使用不同名称注册的相同接口,以及一个在其构造函数中请求特定接口的类:

[TestClass] public class NamedCI { internal interface ITestInterface { int GetValue(); } internal class TestClassOne : ITestInterface { public int GetValue() { return 1; } } internal class TestClassTwo : ITestInterface { public int GetValue() { return 2; } } internal class ClassToResolve { public int Value { get; private set; } public ClassToResolve([Dependency("ClassTwo")]ITestInterface testClass) { Value = testClass.GetValue(); } } [TestMethod] public void Resolve_NamedCtorDependencyRegisteredLast_InjectsCorrectInstance() { using (IUnityContainer container = new UnityContainer()) { container.RegisterType("ClassOne"); container.RegisterType("ClassTwo"); container.RegisterType(); var resolvedClass = container.Resolve(); Assert.AreEqual(2, resolvedClass.Value); } } [TestMethod] public void Resolve_NamedCtorDependencyRegisteredFirst_InjectsCorrectInstance() { using (IUnityContainer container = new UnityContainer()) { container.RegisterType("ClassTwo"); container.RegisterType("ClassOne"); container.RegisterType(); var resolvedClass = container.Resolve(); Assert.AreEqual(2, resolvedClass.Value); } } } 

相反,您可以尝试在对象的构造函数中传递工厂。 这样,您就可以确保(并测试)代码中确切创建的对象。