2016-08-09 19 views
2

動的DIを使用しようとしています。私は私の設定を持っています:動的依存性注入Web Api

この時点で、それはすべてOKです。しかし、クラスを動的に設定する必要があります。私はPermissionRepositoryとPermissionRepositoryTwoという2つのクラスを持っています。そのクラスはPermissionRepositoryとPermissionRepositoryTwoの間で切り替えたいので、IPermissionから実装しています。私は戦略パターンを使用することができますを読んだ、誰かがどのようにこれを解決することができます考えている?

+2

あなたは2つの実装を切り替えたいどうすればよいですか? web.configの設定スイッチに基づいていますか?ユーザーの要求のようなランタイムデータに基づいていますか? – Steven

+0

お返事ありがとうございます。私は要求に応じて設定を使用します。私はWebApiConfigファイルに設定できると思っていましたが、このファイルは一度しか呼び出されません。 –

答えて

3

この共通パターンはプロキシパターンです。このパターンを使用すると、ランタイムまでに使用する実装の決定を遅らせることができ、プロキシ内で決定を隠す一方、完全なオブジェクトグラフを前面に構築することができます。

例:

public sealed class RequestPermissionSelectorProxy : IPermission 
{ 
    private readonly PermissionRepository one; 
    private readonly PermissionRepositoryTwo two; 

    public RequestPermissionSelectorProxy(
     PermissionRepository one, PermissionRepositoryTwo two) { 
     this.one = one; 
     this.two = two; 
    } 

    // Here select the permission based on some runtime condition. Example: 
    private IPermission Permission => 
     HttpContext.Current.Items["two"] == true ? two : one; 

    public object PermissionMethod(object arguments) { 
     return this.Permission.PermissionMethod(arguments); 
    } 
} 

ここで登録する方法は次のとおりです。

container.RegisterType<IPermission, RequestPermissionSelectorProxy>(
    new HierarchicalLifetimeManager()); 
+0

ありがとう!あなたの答えは私を助けます! –