2010-11-25 70 views
0

在我的實現中,我有一個接口:ICachingManager。我現在有一個實現。我還創建了一個管理器類爲:在Unity中註冊組合類

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 
} 

如果我有一個實現的話,我可以很容易地註冊統一CachingManager類,自動統一解決並注入了ICachingManager。

如果我有多個使用命名類型的實現,那我該如何使用Unity?我是否需要利用抽象工廠來確定要初始化哪個指定類型?

使用這樣的組合類或直接使用Abstract Factory接口的實現是一個好主意嗎?

回答

0

您不必創建抽象工廠。你可以注入一個給定的命名的實現:

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

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

,或者你可以配置容器做同樣的事情:

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

感謝ONOF :)。如果我在編譯時不知道名稱,而是從配置文件讀取它,那麼我需要一個工廠?還有一件事,我想看看如何配置Uinty 2.0的類型,不實現任何接口,配置文件中的語法是什麼?非常感謝 – Bill 2010-11-25 12:46:36