C# 通过属性注入依赖项的正确方法
我正在写一些代码,有人告诉我其中有一个潜在的bug。我们的建筑师解释了原因,但我还是不明白。在我看来,即使在他的纠正之后,它也在做同样的工作。有人能向我解释最初的错误吗 根据我们的架构师,它应该是什么样子:C# 通过属性注入依赖项的正确方法,c#,dependency-injection,C#,Dependency Injection,我正在写一些代码,有人告诉我其中有一个潜在的bug。我们的建筑师解释了原因,但我还是不明白。在我看来,即使在他的纠正之后,它也在做同样的工作。有人能向我解释最初的错误吗 根据我们的架构师,它应该是什么样子: private IIzuProxyService _izuProxyService = null; private IIzuProxyService IzuProxyService { get { if (_i
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;
}
}
非常感谢 您的代码从不分配给
\u izurouxyservice
字段
这意味着每当访问
izupxyservice
属性时,\u izupxyservice
总是null
。因此,它将始终实例化一个新实例。本地字段从未被赋值,并且将保持空值,因为属性getter每次都返回一个新实例,而不给本地字段赋值
一种解决方法可以用来管理所需字段的延迟加载
提供对延迟初始化的支持
原始实例将始终返回一个新实例。注意,这里没有注入。在这种情况下,调试器是您的朋友。在旧代码中的
返回新的
行上放置断点。运行它(以便它调用getter两次)。看看会发生什么。然后换成新代码,做同样的事情。你马上就能发现这个虫子。
private Lazy<IIzuProxyService> _izuProxyService = new Lazy<IIzuProxyService>(() => new IzuProxyService() );
private IIzuProxyService IzuProxyService {
get {
return _izuProxyService.Value;
}
}
if (_izuProxyService == null)
_izuProxyService = new IzuProxyService();
return _izuProxyService;