繁体   English   中英

为什么“ resolve”方法总是调用已经在Unity中注册的类构造函数?

[英]Why “resolve” method always calls the class constructor that is already registered in Unity?

我在WPF应用程序中使用UnityPrism 我有一个以这种方式在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM