gpt4 book ai didi

c# - 使用 Unity 将对已注册类型和具体对象的依赖注入(inject)到构造函数中

转载 作者:行者123 更新时间:2023-11-30 22:41:25 24 4
gpt4 key购买 nike

我有一个类 MyClass 具有以下构造函数:

public MyClass(IRepository repository, AnotherClass anObject) { ... }

接口(interface) IRepository 在应用程序启动时使用 Unity 2 注册以映射到具体类:

IUnityContainer container = new UnityContainer();
container.RegisterType<IRepository, MyConcreteRepository>();

现在,构造函数的第二个参数的具体实例总是根据应用程序上下文而不同。所以我无法在启动时将 AnotherClass 注册为特定实例,也没有意义让 Unity 使用其默认构造函数创建该类的对象,如果我调用:

container.Resolve<MyClass>()

这解析为 new MyClass(new MyConcreteRepository(), new AnotherClass())

如果我有一些给定的 AnotherClass 类型的具体对象 anObject,我正在寻找的是一种告诉 Unity 解析 MyClass

new MyClass(new MyConcreteRepository(), anObject)

无需在容器中永久注册实例 anObject

这可能吗?如何实现?

提前感谢您的帮助!

最佳答案

您可以使用ParameterOverride:

var myClass = container.Resolve<MyClass>(new ParameterOverride("anObject", anObject));

如果示例中使用的名称不清楚,这会将对象 anObject 分配给 MyClass 构造函数中名为“anObject”的参数。

关于c# - 使用 Unity 将对已注册类型和具体对象的依赖注入(inject)到构造函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4819811/

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