Я работаю над проектом на C #. Я пытаюсь избавиться от класса Factory с большим оператором switch
.
Я хочу настроить Autofac так, чтобы он мог построить зависимость на основе параметра, тем самым позволяя Autofac занять место Factory.
Я просматривал страницу DelegateFactories вики Autofac , но не могу понять, как применить шаблон к абстрактному классу. Вот некоторый код, показывающий ситуацию:
public enum WidgetType
{
Sprocket,
Whizbang
}
public class SprocketWidget : Widget
{
}
public class WhizbangWidget : Widget
{
}
public abstract class Widget
{
public delegate Widget Factory(WidgetType widgetType);
}
public class WidgetWrangler
{
public Widget Widget { get; private set; }
public WidgetWrangler(IComponentContext context, WidgetType widgetType)
{
var widgetFactory = context.Resolve<Widget.Factory>();
Widget = widgetFactory(widgetType);
}
}
Мне бы хотелось, если бы я сказал new WidgetWrangler(context, WidgetType.Sprocket)
, его свойство Widget
было бы SpocketWidget
.
Когда я пытаюсь это сделать, я получаю сообщение о том, что Widget.Factory
не зарегистрировано. Этот шаблон фабрики делегатов не работает с абстрактными классами, и если да, есть ли другой способ сделать это?