不能在构造函数中使用Unity依赖
本文关键字:Unity 依赖 构造函数 不能 | 更新日期: 2023-09-27 18:06:07
我遇到了一个问题,我似乎找不到解决方案,只是因为我不明白如何修复这个NullReferenceException。
我有了构造函数;
public MainViewModel()
{
this.Refresh = new DelegateCommand(this.DoRefresh);
//...More like this...
//...and finally...
this.InitializeObjects();
}
那么在属性之间就会有依赖
[Dependency]
public IUnityContainer Container { get; set; }
最后是initializeobjects方法在'Container'上生成NullReferenceException
private void InitializeObjects()
{
using (var context = this.Container.Resolve<IDbContextScope>())
{
//...remainder of the method...
}
}
在代码块的第3行抛出异常,即以'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。需要容器的函数用于初始化程序需要实现的值,因此需要在构造函数内部调用。我想我不能只是声明依赖关系,所以我如何工作围绕这个…?
像这样的依赖属性的问题
[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; }
}