如何防止依赖对象在其他地方实例化
本文关键字:实例化 其他 何防止 依赖 对象 | 更新日期: 2023-09-27 18:26:02
因此,基本上,如果我有一个实现接口IMyMonkeyService
的服务MyMonkeyService
,并且我使寄存器成为DI对象,如:
SimpleIOC.Default.Register(Of IMyMonkeyService, MyMonkeyService)
我如何确保我之后的一些开发人员不会在应用程序中的某个地方创建MyMonkeyService的新实例?我不能将Service的构造函数设为私有或受保护,因为这样DI就不会工作,如果我在服务上创建Init()方法,它仍然可以用于"新开发人员"。
让MyMonkeyService
成为单例怎么样?
你会有这样的实现:
public class MyMonkeyService : IMyMonkeyService
{
private static MyMonkeyService _instance;
public static IMyMonkeyService Instance
{
get
{
// Gets the singleton if created, otherwise create a new instance
return _instance != null ? _instance : (_instance = new MyMonkeyService());
}
}
// Private constructor
private MyMonkeyService()
{
// ...
}
}
我不知道你使用的是什么DI框架,但你最终会得到以下内容:
SimpleIOC.Default.Register(Of IMyMonkeyService, MyMonkeyService.Instance);
每次注入服务时,都会使用相同的实例。
如果需要多个实例,则不能。您提供给DI容器的所有内容都将提供给另一个开发人员。
不过,您可以编写一个分析器,它检查MyMonkeyService
的实例化并发出适当的错误。
这个或这个可以帮助你开始。
Roselyn Analyzers允许您编写代码分析工具,检查代码中的特定模式,并相应地发出错误和警告。您甚至可以为该模式定义修复程序。