在密封类

时间:2018-06-07 22:34:30

标签: c# .net

在密封类中实例化另一个类的推荐方法是什么:

public sealed class AvayaService
{
    private static Lazy<AvayaService> lazy =
       new Lazy<AvayaService>(() => new AvayaService());

    public static AvayaService AvayaServiceInstance
    {
        get
        {
            if (!lazy.IsValueCreated)
                lazy = new Lazy<AvayaService>(() => new AvayaService());
            return lazy.Value;
        }
    }

    private AvayaService()
    {
    }

    public static Response GetResponse(Request request)
    {
       var _repository = new Repository(); //  what is the best way to get the instance here

    }
}

public class Repository : IRepository
{
   ...
}

我正在尝试学习密封类和惰性实例化,但是我在思考应该在密封类中实例化另一个类的推荐方法?

1 个答案:

答案 0 :(得分:-1)

没有&#34;建议&#34;在这方面。如果您已阅读建议,请再次阅读,这很可能只是一个练习。它给你一个想法,但在一个真实的项目中使用这个想法取决于你。有时这些练习表现出相反的方法。有时,存储库所有者会指定违反您之前阅读的任何规则的风格,并且它完全没问题。

这是另一个实例化练习,我认为这有助于尝试:永远不会实例化除了值对象之外的任何东西。将实例化委派给container。避免单例模式,但将您的服务注册为容器中的单例。通过这种方式,您的代码将如下所示:

public sealed class AvayaService
{
    private readonly IRepository _repository;

    public AvayaService(IRepository repository)
    {
        if(repository == null)
            throw new ArgumentNullException();
        _repository = repository;
    }

    public static Response GetResponse(Request request)
    {
        // use _repository
    }
}