BrokenIoCChain我正在构建一个应用程序,它使用抽象工厂模式允许运行时根据它对识别请求的响应来确定我的IHardwareDevice的哪个子类。我可能会创建Hardware1或Hardware2。出现问题是因为我想在这些IHardwareDevice对象中使用状态模式,并且我希望IoC容器创建状态。有没有一种不用直接调用IoC容器来解析用于保护IHardwareDevice的State对象的好方法呢?或者,我是否以错误的方式思考这个问题?由于我的工厂几乎是这个库的入口点,是否可以让这个工厂句柄实例化容器以在库中使用?我计划让客户端应用程序实例化容器,然后使用它来访问库的所需部分,例如工厂。我计划使用Windsor作为IoC容器,但如果需要,我可以在项目早期进行切换。Windsor有一个非常强大的自动实现抽象工厂的工具——TypedFactoryFacility,它主要基于约定,如果默认的约定不能满足你的需求,你可以通过提供一个自定义的ITypedFactoryComponentSelector来覆盖它。它使您可以访问做出决定可能需要的所有信息——您想要传递给调用通道的内联参数,以及您想要解析的组件。这是使用Autofac2.2(http://autofac.org)完成的一种方法:首先,枚举用于区分状态(构成一些可能的值):publicenumDeviceState{Online,Offline}然后,状态实现,对于示例:publicclassOnlineState:IDeviceState{}接下来,使用相应的枚举键注册每个状态:varbuilder=newContainerBuilder();builder.RegisterType().Keyed(DeviceState.Online);建造者.RegisterType()。键控(DeviceState.Offline);//在这里注册其他组件最后,硬件设备使用索引来选择状态。IIndex的实现由容器自动提供:publicclassModem:IHardwareDevice{IIndex_states;IDeviceState_currentState;公共调制解调器(IIndex状态){_states=状态;打开();}voidSwitchOn(){_currentState=_states[DeviceState.Online];}}希望这可以帮助。大多数IoC容器(包括Windsor)都可以选择将显式依赖项(参数)传递给已解析的依赖项的构造函数;当您调用Resolve方法时。所以是的,您可以显式地将State对象传递给您正在解析的IHardwareDevice实例。以上就是C#学习教程:中断IoC链分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
