通过属性注入依赖性的正确方法

时间:2019-10-25 09:14:58

标签: c# dependency-injection

我正在编写一些代码,但被告知我存在潜在的错误。我们的架构师解释了为什么,但我仍然看不到。在我看来,即使在他纠正之后,它也正在做同样的工作。任何人都可以向我解释本来的错是什么?

根据我们的架构师,它的外观如何:

    private IIzuProxyService _izuProxyService = null;

    private IIzuProxyService IzuProxyService
    {
        get
        {
            if (_izuProxyService == null)
                _izuProxyService = new IzuProxyService();
            return _izuProxyService;
        }
    }

它的原始外观:

    private IIzuProxyService _izuProxyService = null;

    private IIzuProxyService IzuProxyService
    {
        get
        {
            if (_izuProxyService == null)
                return new IzuProxyService();
            return _izuProxyService;
        }
    }

非常感谢!

2 个答案:

答案 0 :(得分:0)

您的代码永远不会分配给_izuProxyService字段。

这意味着只要访问IzuProxyService属性,_izuProxyService 总是 null。因此它将总是实例化一个新实例。

答案 1 :(得分:0)

永远不会为本地字段分配值,因为属性getter每次都会返回一个新实例而不会为本地字段分配值,因此该字段将保持为空。

一种解决方法是使用Lazy<T>来管理所需字段的延迟加载。

  

提供对延迟初始化的支持。

Lazy<T>

if (_izuProxyService == null) _izuProxyService = new IzuProxyService(); return _izuProxyService; 替换

{{1}}