[英]Unity container - resolve object which always same constructor parameter
[英]Why “resolve” method always calls the class constructor that is already registered in Unity?
我在WPF应用程序中使用Unity和Prism 。 我有一个以这种方式在Bootstrapper中注册到Container
的类:
Container.RegisterType<MyClass>();
该类具有一个构造函数,该构造函数具有ILoggerFacade
接口作为参数:
private ILoggerFacade _logger;
public MyClass(ILoggerFacade logger)
{
_logger = logger;
//do some stuff
}
当我尝试解析该类实例时,我意识到返回实例时会调用类构造函数。 因此,所有工作都是从头开始的。 我以这种方式解析实例:
MyClass a = Container.Resolve<MyClass>();
在我执行的每个Resolve方法中调用构造函数的原因是什么?
如果您不希望每次解析都实例化组件,则需要将其生命周期声明为ContainerControlled:
myContainer.RegisterType<MySingletonObject>(new ContainerControlledLifetimeManager());
请参阅https://msdn.microsoft.com/zh-cn/library/dn178463%28v=pandp.30%29.aspx#sec34,但请注意副作用,因为您的对象的行为就像单例一样
默认情况下(当您不指定其他寿命管理器时),Unity使用过渡寿命管理器。 每次调用resolve时,过渡生命周期管理器都会为您提供一个已注册类型的新实例。 在注册期间可以指定其他寿命管理器,这些管理器将提供不同的行为(单例等)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.