2010-03-08 40 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