所以基本上,如果我有一个实现接口(interface)MyMonkeyService的服务IMyMonkeyService,并且我将一个DI对象注册为:

SimpleIOC.Default.Register(Of IMyMonkeyService, MyMonkeyService)

如何确保我之后的一些开发人员不打算在应用程序中的某个位置创建MyMonkeyService的新实例?我不能将Service的构造函数设为私有(private)或 protected ,因为那样DI将无法工作,如果我在该服务上创建Init()方法,则“新开发者”仍将使用它。

最佳答案

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);

每次注入(inject)服务时,都会使用同一实例

关于c# - 如何防止Dependency对象在其他地方实例化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34121869/

10-13 06:20