我在注册表中定义了默认的具体类型:
ForRequestedType<IXRepository>()
.TheDefaultIsConcreteType<CacheXRepository>();
ChaceXRepository具有以下构造函数:
public class CacheXRepository:IXRepository {
public CacheXRepository(IXRepository xRepository,ICache cacheService){
在构造函数中,它接收一个与自身具有相同接口类型的对象,但我想传入一个不同的具体类型。
如何在注册表中定义如果类型是CacheXRepository,那么我希望参数IXRepository的具体类型是XRepository,在所有其他情况下,IXRepository应该解析为CacheXRepository。
答案 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>();