为了账号安全,请及时绑定邮箱和手机立即绑定

在密封类中实例化另一个类

在密封类中实例化另一个类

C#
明月笑刀无情 2021-07-23 17:09:56
在密封类中实例化另一个类的推荐方法是什么: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 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

这方面没有“建议”。如果您已阅读建议,请再次阅读,这很可能只是一个练习。它给了你一个想法,但在实际项目中使用这个想法取决于你。有时,这些练习展示了相反的方法。有时,存储库所有者会规定违反您之前阅读过的任何规则的样式,这完全没问题。


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


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

    }

}


查看完整回答
反对 回复 2021-07-31
  • 1 回答
  • 0 关注
  • 242 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信