Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection 具有多个装饰器的装饰器模式和结构图_Dependency Injection_Structuremap - Fatal编程技术网

Dependency injection 具有多个装饰器的装饰器模式和结构图

Dependency injection 具有多个装饰器的装饰器模式和结构图,dependency-injection,structuremap,Dependency Injection,Structuremap,我正在尝试用结构图连接一系列的装饰器,但是我遇到了一些问题 我读过这本书,它让我达到了一个点,我可以有一个装饰类,但我似乎不能让多个层次的装饰工作。我拥有的是以连接字符串作为参数的类A,然后是类B和类C,它们都是类A的装饰器。我可以得到structuremap来创建B,它包装A,但我似乎不能得到C包装B包装A 这适用于1级: For<IQuestionRepository> () .Use<LinqToSqlQuestionRepository&

我正在尝试用结构图连接一系列的装饰器,但是我遇到了一些问题

我读过这本书,它让我达到了一个点,我可以有一个装饰类,但我似乎不能让多个层次的装饰工作。我拥有的是以连接字符串作为参数的类A,然后是类B和类C,它们都是类A的装饰器。我可以得到structuremap来创建B,它包装A,但我似乎不能得到C包装B包装A

这适用于1级:

For<IQuestionRepository> ()
                .Use<LinqToSqlQuestionRepository> ()
                    .Ctor<string>("connectionString")
                    .Is(x=>System.Configuration.ConfigurationManager.ConnectionStrings["aspnetdbConnectionString"].ConnectionString)
                .EnrichWith (x=>new RecentQuestionCachedRepository(x))
() .使用() .Ctor(“连接字符串”) .Is(x=>System.Configuration.ConfigurationManager.ConnectionString[“aspnetdbConnectionString”].ConnectionString) .EnrichWith(x=>new RecentQuestionCachedRepository(x)) 我认为仅仅添加另一个EnrichWith就可以这样工作:

For<IQuestionRepository> ()
                .Use<LinqToSqlQuestionRepository> ()
                    .Ctor<string>("connectionString")
                    .Is(x=>System.Configuration.ConfigurationManager.ConnectionStrings["aspnetdbConnectionString"].ConnectionString)
                .EnrichWith (x=>new RecentQuestionCachedRepository(x))
                .EnrichWith (y=>new FeaturedQuestionCachedRepository(y));
() .使用() .Ctor(“连接字符串”) .Is(x=>System.Configuration.ConfigurationManager.ConnectionString[“aspnetdbConnectionString”].ConnectionString) .EnrichWith(x=>new RecentQuestionCachedRepository(x)) .EnrichWith(y=>新功能问题缓存假设(y)); 但这只是给了我一个FeaturedQuestionCachedRepository,它包装了一个LinqToSqlQuestionRepository,但最近的QuestionCachedRepository不在堆栈中的任何位置


我做错了什么?

在一个EnrichWith呼叫中完成:

.EnrichWith (x=> 
  new FeaturedQuestionCachedRepository(
  new RecentQuestionCachedRepository(x)
  )
)