2017-04-06 112 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已經被填充了。