Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Unity将对注册类型和具体对象的依赖关系注入构造函数_C#_.net_Dependency Injection_Unity Container - Fatal编程技术网

C# 使用Unity将对注册类型和具体对象的依赖关系注入构造函数

C# 使用Unity将对注册类型和具体对象的依赖关系注入构造函数,c#,.net,dependency-injection,unity-container,C#,.net,Dependency Injection,Unity Container,我有一个带有以下构造函数的类MyClass: public MyClass(IRepository repository, AnotherClass anObject) { ... } 接口IRepository在应用程序启动时注册,Unity 2将映射到一个具体类: IUnityContainer container = new UnityContainer(); container.RegisterType<IRepository, MyConcreteRepository>(

我有一个带有以下构造函数的类
MyClass

public MyClass(IRepository repository, AnotherClass anObject) { ... }
接口
IRepository
在应用程序启动时注册,Unity 2将映射到一个具体类:

IUnityContainer container = new UnityContainer();
container.RegisterType<IRepository, MyConcreteRepository>();
这将解析为
newmyclass(newmyconcreterepository(),newanotherclass())

如果我有一个类型为另一个类的特定对象,我要寻找的是告诉Unity将MyClass解析为

new MyClass(new MyConcreteRepository(), anObject)
不在容器中永久注册实例
anObject

这可能吗?如何实现


提前感谢您的帮助

您可以使用
参数覆盖

var myClass = container.Resolve<MyClass>(new ParameterOverride("anObject", anObject));
var myClass=container.Resolve(新参数覆盖(“anObject”,anObject));

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

谢谢,这很有效!不幸的是,如果我不小心将参数名称从
anObject
更改为类似
myObject
的其他名称,Unity将创建一个新的默认对象,那么它会默默地忽略被覆盖的参数。在我的特殊情况下,我希望得到一个“ParameterNotFound”异常或类似的东西。但我想我不得不接受这个事实。是的,我希望unity在这种情况下也能破例。另一件需要注意的事情是,如果您将MyClass子类化并使用参数重写,它将在任何base()构造函数链中波动。
var myClass = container.Resolve<MyClass>(new ParameterOverride("anObject", anObject));