Structuremap按对象类型使用不同的具体类型

时间:2010-03-08 13:31:34

标签: structuremap concrete

我在注册表中定义了默认的具体类型:

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

ChaceXRepository具有以下构造函数:

public class CacheXRepository:IXRepository {

    public CacheXRepository(IXRepository xRepository,ICache cacheService){

在构造函数中,它接收一个与自身具有相同接口类型的对象,但我想传入一个不同的具体类型。

如何在注册表中定义如果类型是CacheXRepository,那么我希望参数IXRepository的具体类型是XRepository,在所有其他情况下,IXRepository应该解析为CacheXRepository。

2 个答案:

答案 0 :(得分:2)

你应该看看enrichwith方法。然后代码看起来像:

      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

答案 1 :(得分:0)

如何(不是testet):

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

我不太熟悉Structuremap方言:)

在我使用的版本中,它将是:

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