使 Microsoft Unity 依赖属性在构造函数中可用
Making Microsoft Unity dependency properties available in constructors
我有以下(简化的)代码:
public abstract class BaseClass
{
[Dependency]
public IRequiredService RequiredService { get; set; }
protected string RequiredParameter { get; private set; }
public BaseClass(string requiredParameter)
{
this.RequiredParameter = requiredParameter;
}
}
public class DerivedClass : BaseClass
{
public DerivedClass(string requiredParameter) : base(requiredParameter)
{
RequiredService.DoSomething(); //this will fail!
}
}
换句话说,我想在构造函数中访问由 Unity 填充的 RequiredService
...但这是不可能的,因为 属性 尚未由 Unity 填充然而。我可以将 IRequiredService
添加为必需的构造函数参数,但随后我需要重构每个派生 class 的每个构造函数以也包含该参数。
我在想有没有更好的办法
简而言之,我想 运行 在构建 class 并且统一填充所有标有 class 的属性后编写一些代码 [Dependency]
属性。
有没有简单的方法可以做到这一点?
您可以将其放在 [InjectionMethod]
调用中,而不是将 RequiredService.DoSomething();
放在构造函数中,这将使您可靠地知道 RequiredService
已被填充。
我有以下(简化的)代码:
public abstract class BaseClass
{
[Dependency]
public IRequiredService RequiredService { get; set; }
protected string RequiredParameter { get; private set; }
public BaseClass(string requiredParameter)
{
this.RequiredParameter = requiredParameter;
}
}
public class DerivedClass : BaseClass
{
public DerivedClass(string requiredParameter) : base(requiredParameter)
{
RequiredService.DoSomething(); //this will fail!
}
}
换句话说,我想在构造函数中访问由 Unity 填充的 RequiredService
...但这是不可能的,因为 属性 尚未由 Unity 填充然而。我可以将 IRequiredService
添加为必需的构造函数参数,但随后我需要重构每个派生 class 的每个构造函数以也包含该参数。
我在想有没有更好的办法
简而言之,我想 运行 在构建 class 并且统一填充所有标有 class 的属性后编写一些代码 [Dependency]
属性。
有没有简单的方法可以做到这一点?
您可以将其放在 [InjectionMethod]
调用中,而不是将 RequiredService.DoSomething();
放在构造函数中,这将使您可靠地知道 RequiredService
已被填充。