private readonly IDictionary<Type, IAutomationService> _automationServices =
new Dictionary<Type, IAutomationService>();
public AutomationFactory(
GameDiscountAutomation gameDiscountAutomation)
{
_automationServices.Add(typeof(GameDiscountAutomationSetting), gameDiscountAutomation);
}
public IAutomationService Create<T>(T automationSetting) where T : AutomationSetting
{
_automationServices.TryGetValue(typeof(T), out var automation);
return automation;
}
}
Коллеги, подсобите советом. Как ограничить тип ключа в коллекции, чтобы он был наследником определенного класса, в моем случае AutomationSetting? Если явно указать AutomationSetting, то тогда в Startup не удается его отрезолвить
Мне кажется, стоит попробовать внедрить зависимость между IAutomationSetting и AutomationSetting, или так уже было сделано? Я не совсем понял
это просто класс с набором полей. Без методов. Зачем ему интерфейс?
Сейчас понятнее. а почему в Startup не получалось отрезолвить? Можешь показать как внедрил?
services.AddSingleton<IAutomationFactory, AutomationFactory>(); services.AddSingleton<GameDiscountAutomation>(); Я так понимаю не резолвится по причине того что я не передаю объект класса, наследуемый от AutomationSetting, но дело в том, что я не знаю как правильно это сделать
Что-то я не понимаю, что может не резолвиться. AutomationFactory не параметризован, параметризован метод Create, но к резолвингу отношения он не имеет. Возможно проблема в ожидании GameDiscountAutomation в конструкторе AutomationFactory, хотя пока какой-то явной проблемы с этим я не вижу. В общем, нужно больше информации. Например, какую ошибку и когда выдает, ибо я до конца не понимаю в чем вообще проблема.
Возможно я выразился неправильно, но если сделать так public class AutomationFactory : IAutomationFactory { private readonly IDictionary<AutomationSetting, IAutomationService> _automationServices = new Dictionary<AutomationSetting, IAutomationService>(); public AutomationFactory( GameDiscountAutomation gameDiscountAutomation) { _automationServices.Add(new GameDiscountAutomationSetting(), gameDiscountAutomation); } public IAutomationService Create<T>(T automationSetting) where T : AutomationSetting { _automationServices.TryGetValue(automationSetting, out var automation); return automation; } } т.е. явно ограничить тип ключа объектом AutomationSetting, то я получаю null exception
Обсуждают сегодня