Я работаю над проектом С#. Я пытаюсь избавиться от класса 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
не зарегистрирован. Этот шаблон фабрики делегатов не работает с абстрактными классами, и если да, то есть ли другой способ сделать это?