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

Structuremap按对象类型使用不同的具体类型,structuremap,concrete,Structuremap,Concrete,我在注册表中定义了一个默认的具体类型: ForRequestedType<IXRepository>() .TheDefaultIsConcreteType<CacheXRepository>(); 在构造函数中,它接收一个与自身具有相同接口类型的对象,但我想传入一个不同的具体类型 我如何在注册表中定义,如果类型是CacheXRepository,那么我希望参数IXRepository的具体类型是XRepository,在所有其他情况下,IXRe

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

    ForRequestedType<IXRepository>()
        .TheDefaultIsConcreteType<CacheXRepository>();
在构造函数中,它接收一个与自身具有相同接口类型的对象,但我想传入一个不同的具体类型


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

您应该看看enrichwith方法。然后代码将类似于:

      ForRequestedType<IXRepository>().TheDefault.Is
            .OfConcreteType<XRepository>()
            .EnrichWith(
            (context, repository) =>
            new CacheXRepository(repository));
ForRequestedType()。默认值为
.of混凝土类型()
恩里希维思先生(
(上下文、存储库)=>
新的CacheXRepository(repository));
查看此页面了解更多信息:

类似(非测试)的内容如何:

ForRequestedType()
.默认混凝土类型()
.WithTorArg(“xREpository”)
.EqualTo(新XRepository());
我对Structuremap方言不太熟悉:)

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

For<IXRepository>()
  .Use<CacheXRepository>()
  .CtorDependency<IXRepository>("xRepository")
  .IsConcreteType<XRepository>();
() .Use() .x依赖关系(“xRepository”) .IsConcreteType();
谢谢!我根据您的答复使用的代码:ForRequestedType().TheDefaultIsConcreteType().EnrichWith((存储库)=>new CacheXRepository(存储库,ObjectFactory.GetInstance());感谢您的快速响应,我最终使用了不同的答案,因为它使用了我版本中的语法。谢谢你,我感谢你的帮助!没问题——你应该在接受他的答案的同时,对他的答案投赞成票:)
ForRequestedType<IXRepository>()
  .TheDefaultIsConcreteType<CacheXRepository>()
  .WithCtorArg("xREpository")
  .EqualTo(new XRepository());
For<IXRepository>()
  .Use<CacheXRepository>()
  .CtorDependency<IXRepository>("xRepository")
  .IsConcreteType<XRepository>();