1

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

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

ChaceXRepository 具有以下构造函数:

公共类 CacheXRepository: IXRepository{

    public CacheXRepository(IXRepository xRepository,ICache cacheService){

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

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

4

2 回答 2

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

于 2010-03-08T13:42:25.033 回答
0

怎么样(不是testet):

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

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

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

For<IXRepository>()
  .Use<CacheXRepository>()
  .CtorDependency<IXRepository>("xRepository")
  .IsConcreteType<XRepository>();
于 2010-03-08T13:44:38.703 回答