配置在抽象类上定义的Autofac委托工厂我试图摆脱具有大型switch语句的工厂类。我想将Autofac配置为能够根据参数构建依赖关系,让Autofac取代Factory。我查看了Autofacwiki的DelegateFactories页面,但我不知道如何将模式应用于抽象类。下面是一些代码来展示这种情况:}publicclassWidgetWrangler{publicWidgetWidget{get;私有集;}publicWidgetWrangler(IComponentContextcontext,WidgetTypewidgetType){varwidgetFactory=context.Resolve();小部件=widgetFactory(widgetType);我喜欢说newWidgetWrangler(context,WidgetType.Sprocket),它的Widget属性将是一个SpocketWidget。当我尝试这样做时,我收到错误消息,指出Widget.Factory未注册。这个委托工厂模式是否不适用于抽象类,如果是这样,是否有另一种方法可以实现这一点?您正在寻找的是IIndex关系类型。如果子类使用.Keyed(...)注册,.Keyed(...)可以将注册键锁定到值(对象)。例如:builder.RegisterType().Keyed(WidgetType.Sproket).InstancePerDependency();builder.RegisterType().Keyed(WidgetType.Whizbang).InstancePerDependency();那么你只需要依靠IIndex来模仿工厂行为。公共类SomethingThatUsesWidgets{privatereadonlyIIndex_widgetFactory;publicSomethingThatUsesWidgets(IIndexwidgetFactory){如果(widgetFactory==null)throwArgumentNullException("widgetFactory");_widgetFactory=小部件工厂;}publicvoidDoSomething(){//简单用法:Widgetwidget=widgetFactory[WidgetType.Whizbang];//安全使用:Widgetwidget2=null;if(widgetFactory.TryGetValue(WidgetType.Sprocket,outwidget2)){//dostuff}}}如果只想修复工厂,使用依赖注入方法:以上是C#学习教程:配置分享的所有内容Autofac委托工厂定义在抽象类上。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——varfactory=Container.Resolve>();本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
