【发布时间】:2017-08-24 01:38:08
【问题描述】:
Unity 允许创建一个单例:
this.UnityContainer.RegisterType<MyClass>(new ContainerControlledLifetimeManager());
var instance = this.UnityContainer.Resolve<MyClass>();
对 MyClass 的构造函数的访问必须是公开的,以允许容器能够创建新实例(对于另一个项目,如模块,...)。
在这种情况下,开发者仍然可以直接使用构造函数来创建一个新的实例:
var instance = new MyClass();
如何防止开发人员这样做?
另一种方法是创建一个实例(类的构造函数访问现在是私有的 - 单例模式)并使用统一注册它,如下所示,我失去了依赖属性注入,我的解决方法是使用服务定位器来初始化静态方法Instance中的依赖属性:
this.UnityContainer.RegisterInstance<MyClass>(MyClass.Instance);
在两种情况下同时定义单例模式的最佳方法是什么(有和没有统一)?
【问题讨论】:
标签: c# singleton unity-container