【问题标题】:Structuremap use different concrete type by object typeStructuremap 按对象类型使用不同的具体类型
【发布时间】:2010-03-08 13:31:34
【问题描述】:

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

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

ChaceXRepository 具有以下构造函数:

公共类 CacheXRepository: IXRepository{

    public CacheXRepository(IXRepository xRepository,ICache cacheService){

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

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

【问题讨论】:

    标签: structuremap concrete


    【解决方案1】:

    你应该看看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

    【讨论】:

    • 谢谢!我根据您的回复使用的代码: ForRequestedType() .TheDefaultIsConcreteType() .EnrichWith((repository) => new CacheXRepository(repository,ObjectFactory.GetInstance()));
    【解决方案2】:

    怎么样(不是 testet):

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

    我对那种 Structuremap 方言不太熟悉 :)

    在我使用的版本中:

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

    【讨论】:

    • 感谢您的快速回复,我最终使用了不同的答案,因为它使用了我版本中的语法。谢谢,感谢您的帮助!
    • 没问题 - 你应该赞成他的回答并接受它:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    相关资源
    最近更新 更多