2010-11-25 1 views
0

私の実装では、私はICachingManagerというインタフェースを持っています。私は今、1つの実装を持っています。私は1つの実装を持っていた場合にはユニティにコンポジットクラスを登録する

public class CachingManager 
{ 
    #region Members 
    private ICachingManager service; 
    #endregion 

    #region Constructors 
    public CachingManager(ICachingManager service) 
    { 
     this.service = service; 
    } 
    #endregion 

    #region Public Methods 
    public void EnCache<T>(string key, T value) 
    { 
     this.service.EnCache<T>(key, value); 
    } 

    public T DeCache<T>(string key) 
    { 
     return this.service.DeCache<T>(key); 
    } 
    #endregion 
} 

、その後、私は簡単に自動的にUnityがICachingManagerを解決し、注入し、UnityとCachingManagerクラスを登録することができます:私はまた、マネージャークラスを作成しました。

名前付きタイプを使用して複数の実装がある場合は、Unityをどのように使用できますか?抽象ファクトリを使用して初期化する名前付き型を決定する必要がありますか?

このような複合クラスを使用するか、またはAbstract Factoryとのインターフェイスの実装を直接使用するのは良い考えですか?

答えて

0

抽象ファクトリを作成する必要はありません。

public class MyClient 
{ 
    [Dependency("NamedManager")] 
    public ICachingManager CachingManager { get; set; } 

    // or in the constructor 
    public MyClient([Dependency("NamedManager")] ICachingManager cachingManager) { 
     // ... 
    } 
} 

またはあなたが同じことを行うためにコンテナを設定することができます:あなたは、与えられた名前の実装を注入することができます:) ONOF

public class MyClient 
{ 
    public MyClient(ICachingManager cachingManager) { 
     // ... 
    } 
} 
... 
void ContainerBuilder() { 
    ... 
    Container.RegisterType<MyClient>(
     new InjectionConstructor(
      new ResolvedParameter<ICachingManager>("NamedManager"))); 
    ... 
} 
+0

感謝を。コンパイル時に名前が分からない場合は、代わりにconfigファイルから読み込み、工場が必要ですか?もう1つ、私はどのようにインターフェイスを実装していない型でUinty 2.0を設定するかを見ようとしています、設定ファイルの構文は何ですか?ありがとうございます – Bill

+0

1)実行時に依存関係の名前が与えられ、実行中に変更できる場合は、ファクトリが必要です。2)のような型を登録します。 "mapTo"属性は必要ありません。 http://msdn.microsoft.com/en-us/library/ff660914(v=PandP.20).aspx#config_registerelement – onof

+0

Onofに感謝します。 DIと工場でアイデアが明確になった;)ありがとう。 – Bill

関連する問題