2010-10-19 95 views
3

我一整天都在絞盡腦汁,我無法找到解決方案,所以我幫助我。聽到的是我的問題:我HAWE實現一個接口兩類StructureMap有條件使用

public interface ICacheObject 
{ 
    string Get(); 
} 

public class WebCacheObject : ICacheObject 
{ 
    public string Get() 
    { 
     return "Web"; 
    } 
} 

public class SysteCacheObject : ICacheObject 
{ 
    public string Get() 
    { 
     return "System"; 
    } 
} 

因此,在其他一些CLASE例如類檢驗我NEAD注入WebCacheObject和Test2的CLASE我NEAD注入SystemCacheObject。我這樣做在初始化:

  ObjectFactory.Initialize(c =>{ c.For<IMessage>().Use<Message>(); 
             c.For<ICacheObject>().ConditionallyUse(t =>{t.If(g => g.RequestedName == "HTTP") 
                          .ThenIt.Is.ConstructedBy(
                           () => 
                           new WebCacheObject()); 

                         t.If(g =>g.RequestedName =="OtherCache") 
                          .ThenIt.Is.ConstructedBy(
                           () => 
                           new SysteCacheObject 
                            ()); 
                        }); 

但我不知道該怎麼稱呼測試-S化酶-S,所以如果我把這樣的條件爲真(或如何改變條件,使這將工作)

ObjectFactory.GetInstance <「ITEST>()

測試CLASE將哈威在的WebCache其他情況下SystemCache ???

對不起,我的英語不好。

回答

6

我想你應該避免使用if的條件構造語法 - 如果有更簡單的選擇。在你的情況,我認爲這將做到:

For<ICacheStorage>().Use<NullObjectCache>(); 
For<Test>().Use<Test>.Ctor<ICacheStorage>().Is<HttpContextCacheAdapter>(); 
For<Test2>().Use<Test2>.Ctor<ICacheStorage>().Is<HttpContextCacheAdapter>(); 
2

感謝我沒有找到解決辦法,如果你ENY一個neade聽到的是它(我沒有改變狀態的一些事情,在工作):

x.For<ICacheStorage>().ConditionallyUse(c => 
                   { 
                    c.If(t => t.ParentType == typeof(Test) || 
                     t.ParentType == typeof(Test2)) 
                     .ThenIt 
                     .Is.ConstructedBy(
                      by => new HttpContextCacheAdapter()); 

                    c.TheDefault.Is.ConstructedBy(
                      by => new NullObjectCache()); 

                   }); 

對不起,我英文不好

+0

@PHeiberg解決方案比這更清潔! – Sadegh 2012-09-05 18:26:28