我遇到了一个我似乎无法找到解决方案的问题,因为我不明白如何解决这个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。需要Container的函数用于初始化程序需要运行的值,因此需要在构造函数中调用INSIDE。 AFAIK我不能只声明依赖关系,那么我该如何解决这个问题呢?
答案 0 :(得分:1)
像这样的依赖属性的问题
[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; }
}