2010-03-08 44 views
1

我在註冊表中定義的默認的具體類型使用不同的具體類型:Structuremap按對象類型

ForRequestedType<IXRepository>() 
     .TheDefaultIsConcreteType<CacheXRepository>(); 

的ChaceXRepository具有下面的構造:

公共類CacheXRepository:IXRepository {

public CacheXRepository(IXRepository xRepository,ICache cacheService){ 

在構造函數中,它接收一個與它本身具有相同接口類型的對象,但我想傳入不同的具體類型。

如何在註冊表中定義如果類型是CacheXRepository,那麼我希望參數IXRepository的具體類型爲XRepository,在其他情況下IXRepository應解析爲CacheXRepository。

回答

2

你應該看看豐富的方法。然後代碼看起來像:

 ForRequestedType<IXRepository>().TheDefault.Is 
      .OfConcreteType<XRepository>() 
      .EnrichWith(
      (context, repository) => 
      new CacheXRepository(repository)); 

看看這個頁面瞭解更多信息:http://codebetter.com/blogs/jeremy.miller/archive/2008/01/27/interception-techniques-in-structuremap-2-5.aspx

+0

謝謝! 代碼我根據你的答覆使用: ForRequestedType () .TheDefaultIsConcreteType () .EnrichWith((儲存庫)=>新 CacheXRepository(儲存庫,ObjectFactory.GetInstance ())); – Devora

0

如何像(不testet):

ForRequestedType<IXRepository>() 
    .TheDefaultIsConcreteType<CacheXRepository>() 
    .WithCtorArg("xREpository") 
    .EqualTo(new XRepository()); 

我不是那麼熟悉結構圖方言:)

在我使用它的版本中:

For<IXRepository>() 
    .Use<CacheXRepository>() 
    .CtorDependency<IXRepository>("xRepository") 
    .IsConcreteType<XRepository>(); 
+0

感謝您的快速響應,我最終使用了不同的答案,因爲它使用了我的版本中的語法。謝謝,我感謝你的幫助! – Devora

+0

沒問題 - 你應該upvote他的答案以及接受:) – Luhmann