繁体   English   中英

无法在构造函数中使用Unity依赖项

[英]Cannot use Unity dependency in constructor

我遇到了一个似乎无法找到解决方案的问题,仅仅是因为我不知道如何解决此NullReferenceException。

我有我的构造函数;

public MainViewModel()
{
    this.Refresh = new DelegateCommand(this.DoRefresh);
    //...More like this...
    //...and finally...
    this.InitializeObjects();
}

然后属性之间的某个地方存在依赖性

[Dependency]
public IUnityContainer Container { get; set; }

最后是InitializeObjects方法,在“容器”上生成NullReferenceException

private void InitializeObjects()
{
using (var context = this.Container.Resolve<IDbContextScope>())
{
    //...remainder of the method...
}
}

在此代码块的第三行引发异常,该行以“ using(var ...”

异常是ArgumentNullException;

Message "Value cannot be nul.Parameter name: container"
Source = Microsoft.Practices.Unity
StackTrace = at Microsoft.Practices.Unity.UnityContainerExtensions.Resolve....etc..

所以我的具体问题是: 确实是IUnityContainer容器引发了异常吗? 为什么会引发异常? 我该如何解决?

编辑:

如该帖子下的前2/3条评论所述,NullReferenceException的原因已断言。 但是, 我仍然不知道如何解决它 ,因为我没有将其作为您每天的NRE来体验。 需要容器的函数在那里初始化程序需要起作用的值,因此需要在构造函数内部调用。 AFAIK我不能只声明依赖关系,那么如何解决这个问题呢?

像这样的依赖属性的问题

[Dependency]
public IUnityContainer Container { get; set; }

是它们在构造函数中不可用。 如果必须在构造函数中使用此值,请使用构造函数依赖项

public MainViewModel(IUnityContainer muhContainer, SomeOtherDependency derp)
{
    // use muhContainer and derp here
}

通常,如果您的对象必须具有依赖项,则应通过构造函数注入来提供它。 如果您的依赖项具有可接受的默认值,但是您可能希望在运行时通过配置进行更改,则可以使用属性注入。

[Dependency]
public Herp WhoCares 
{
    get { return _herp ?? _defaultHerpDoesntMatterLol; }
    set { _herp = value; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM