2017-04-06 12 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! 
    } 
} 

を、私はUnityの充填RequiredServiceへのアクセス権を持っているしたいのですがコンストラクタ...しかし、それは不可能です、そのプロパティはまだUnityによって満たされていないので。私は、必要なコンストラクタパラメータとしてIRequiredServiceを追加する必要がありますが、その派生クラスのすべてのコンストラクタをリファクタリングして、そのパラメータも含める必要があります。

もっと良い方法があるのだろうかと思っていました。

つまり、クラスが構築された後、[Dependency]属性でマークされたすべてのクラスのプロパティが1になった後に、少しコードを実行したいと思います。

これを行う簡単な方法はありますか?

+0

['[InjectionMethod]'](https://msdn.microsoft.com/en-us/library/dn507483(v=pandp.30))の中に 'RequiredService.DoSomething();'を置くことを考えましたか? aspx)の代わりにコンストラクタを呼び出しますか? –

+0

@ScottChamberlain優れた提案。私はその属性を見逃しているに違いない。これを公式の答えに変えてください。私はそれを受け入れます。 – Shaamaan

答えて

1

コンストラクタにRequiredService.DoSomething();を入れるのではなく、それを[InjectionMethod]コールの内側に置くことができます。これにより、RequiredServiceが入力されたことを確実に知ることができます。

関連する問題