2017-04-06 69 views
0

我已经得到的(简化)以下代码位可用的属性:使微软统一依赖于构造

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! 
    } 
} 

换句话说,我希望有机会在统一填充RequiredService构造函数......但这是不可能的,因为该属性还没有被Unity填充。我可以添加IRequiredService作为必需的构造函数参数,但是我需要重构每个派生类的每个构造函数以包含该参数。

我想知道是否有更好的方法。

简而言之,我想在完成一个类之后运行一些代码,并且统一之后已经填充了标记为[Dependency]属性的所有类的属性。

有没有简单的方法来做到这一点?

+0

您是否考虑在[[[InjectionMethod]](https://msdn.microsoft.com/en-us/library/dn507483(v = pandp.30))中放入'RequiredService.DoSomething();'。 aspx)调用而不是构造函数? –

+0

@ScottChamberlain优秀的建议。我一定错过了这个属性。随意将此变成正式答案,我会接受它。 – Shaamaan

回答

1

而不是把RequiredService.DoSomething();放在构造函数中,你可以把它放在[InjectionMethod]的调用里面,这会让你可靠地知道RequiredService已经被填充了。