所以基本上如果我有一个实现接口MyMonkeyService
的服务IMyMonkeyService
并且我将一个DI对象注册为:
SimpleIOC.Default.Register(Of IMyMonkeyService, MyMonkeyService)
如何确保我之后的某些开发人员不打算在应用程序的某个位置创建MyMonkeyService的新实例?我无法使Service的构造函数成为私有或受保护,因为DI无法工作,如果我在服务上创建一个Init()方法,它仍然可供“新开发人员”使用。
答案 0 :(得分:2)
如何让MyMonkeyService
成为singleton?
你会有这样的实现:
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);
每次注入您的服务时,都会使用相同的实例。
答案 1 :(得分:1)