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));