为什么“resolve"方法总是调用已经在Unity中注册的类构造函数
本文关键字:Unity 注册 构造函数 调用 resolve quot 方法 为什么 | 更新日期: 2023-09-27 18:04:49
我在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/en-us/library/dn178463%28v=pandp.30%29.aspx#sec34,但要注意副作用,因为您的对象将表现得像一个单例
Unity默认使用瞬态生命周期管理器(当你没有指定另一个生命周期管理器时)。每次调用resolve时,瞬态生命周期管理器都会给您一个注册类型的NEW实例。还有其他生命周期管理器可以在注册期间指定,它们将提供不同的行为(单例等)