在Unity中,注册单例实例的两种方法有什么区别?

Ton*_*y98 6 c# singleton unity-container

在Unity中,据我所知,我可以使用以下两个选项来注册单例实例:

        IConfiguration globalConfig = new Configuration();
        container.RegisterInstance<IConfiguration>(globalConfig);

        container.RegisterType<IConfiguration, Configuration>(new ContainerControlledLifetimeManager()); 
Run Code Online (Sandbox Code Playgroud)

这两种方式有什么区别吗?注册单例实例的首选方法是什么?

Tip*_*ipx 10

第一种方式是注册实例.您必须在执行此操作时创建对象的实例.

第二种方式不是单身人士.它是"容器或其任何子容器的任何分辨率的单例".它将第一次解决将"修复对象的状态"并注册任何进一步的分辨率LifetimeManager.

例如,假设您有以下类:

class AA
{
    public Datetime When { get; set; }
    public AA()
    {
        this.When = Datetime.Now;
    }
}
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,When将在注册之前,在第二种情况下,只要您实际解析该类型/接口.

  • 这是一个很好的例子来解释 2 个选项之间的区别 (3认同)