gpt4 book ai didi

c# - 结构图3多重装饰

转载 作者:行者123 更新时间:2023-11-30 20:24:03 25 4
gpt4 key购买 nike

我正在尝试使用装饰器链在 StructureMap 3 中创建依赖关系图:

每个实例都有一个带有多个参数的构造函数,但只有一个内部 IGeocoder 的参数,例如

public SomeCachingGeocoder(IGeoCoder inner, IFoo somethingElse)

我是这样连接它们的:

For<OviGeoCoder>().Use<OviGeoCoder>();
For<SqlCachingGeocoder>().Use<SqlCachingGeocoder>().Ctor<IGeoCoder>().Is<OviGeoCoder>();
For<RedisCachingGeocoder>().Use<RedisCachingGeocoder>().Ctor<IGeoCoder>().Is<SqlCachingGeocoder>();
For<IGeoCoder>().Use<RedisCachingGeocoder>();

但是我明白了

Bi-directional dependency relationship detected! Check the StructureMap stacktrace below:
1.) Instance of SOAM.Services.IGeoCoder (SOAM.Services.Geocoding.RedisCachingGeocoder)
2.) new RedisCachingGeocoder(Default of IDatabase, Default of IGeoCoder)
3.) SOAM.Services.Geocoding.RedisCachingGeocoder
4.) Instance of SOAM.Services.IGeoCoder (SOAM.Services.Geocoding.RedisCachingGeocoder)
5.) new HomeController(Default of IGeoCoder, Default of IAlertService)
6.) SOAM.Web.Controllers.HomeController
7.) Instance of SOAM.Web.Controllers.HomeController
8.) Container.GetInstance(SOAM.Web.Controllers.HomeController)

有什么解决办法吗?

最佳答案

DecorateAllWith 默认情况下允许 Autowiring ,并允许以非常简单的方式堆叠装饰器:

For<IGeoCoder>().Use<OviGeoCoder>();
For(typeof(IGeoCoder)).DecorateAllWith(typeof(SqlCachingGeocoder));
For(typeof(IGeoCoder)).DecorateAllWith(typeof(RedisCachingGeocoder));

关于c# - 结构图3多重装饰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27600957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com