gpt4 book ai didi

c# - 团结与委托(delegate)

转载 作者:行者123 更新时间:2023-11-30 16:35:46 25 4
gpt4 key购买 nike

我正在使用 Unity 依赖注入(inject)框架。我有两个类,每个类在构造函数中都采用相同的委托(delegate)参数。每个类在解析时都应该获得不同的方法。我可以在不使用属性的情况下进行设置吗?如果不是,您将如何处理属性?

最佳答案

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

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

    [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<ITestInterface, TestClassOne>("ClassOne");
container.RegisterType<ITestInterface, TestClassTwo>("ClassTwo");
container.RegisterType<ClassToResolve>();

var resolvedClass = container.Resolve<ClassToResolve>();

Assert.AreEqual<int>(2, resolvedClass.Value);
}
}

[TestMethod]
public void Resolve_NamedCtorDependencyRegisteredFirst_InjectsCorrectInstance()
{
using (IUnityContainer container = new UnityContainer())
{
container.RegisterType<ITestInterface, TestClassTwo>("ClassTwo");
container.RegisterType<ITestInterface, TestClassOne>("ClassOne");
container.RegisterType<ClassToResolve>();

var resolvedClass = container.Resolve<ClassToResolve>();

Assert.AreEqual<int>(2, resolvedClass.Value);
}
}
}

关于c# - 团结与委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1508359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com