[英]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.