c# – 需要根据StructureMap中请求的父类型不同地配置依赖关系
发布时间:2020-12-15 21:48:51 所属栏目:百科 来源:网络整理
导读:我们正在使用StructureMap,并试图弄清楚如何实现以下目标. 我们有2个接口: ?ICat,IDog 对于ICat,我们需要使用Cat的实例. Cat构造函数采用ISound的实例. 对于IDog,我们需要使用Dog的实例. Dog构造函数也接受了一个ISound实例. ISound有一个实现AnimalSound.
我们正在使用StructureMap,并试图弄清楚如何实现以下目标.
我们有2个接口: 对于ICat,我们需要使用Cat的实例. Cat构造函数采用ISound的实例. 对于IDog,我们需要使用Dog的实例. Dog构造函数也接受了一个ISound实例. ISound有一个实现AnimalSound. 到现在为止还挺好.这部分我们可以很容易地在结构图中做到. 现在问题出现在AnimalSound上. AnimalSound有一个构造函数,可以使用LoudSound或SoftSound进行初始化. (LoudSound和SoftSound共享相同的界面IVolume) 我们希望所有Cats都被赋予一个用SoftSound构建的AnimalSound,并且所有Dogs都是用用LoudSound构造的AnimalSound构建的. 如果没有更改设计以使用Factory,有没有办法在StructureMap中装饰性地配置它(我们使用的是2.6.4.1) 解决方法
使用命名实例,您可以这样做:
For<ISound>().Add<AnimalSound>().Ctor<IVolume>().Is<LoudSound>().Named("Loud"); For<ISound>().Add<AnimalSound>().Ctor<IVolume>().Is<SoftSound>().Named("Soft"); For<ICat>().Use<Cat>().Ctor<ISound>().Named("Soft"); For<IDog>().Use<Dog>().Ctor<ISound>().Named("Loud"); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读