无法在构造函数

时间:2016-09-07 14:33:55

标签: c# mvvm dependency-injection unity-container

我遇到了一个我似乎无法找到解决方案的问题,因为我不明白如何解决这个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我不能只声明依赖关系,那么我该如何解决这个问题呢?

1 个答案:

答案 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; }
}