Я немного застрял с NET.Core 2.0 и IOC.
У меня есть разные классы, которые реализуют интерфейс IAction, эти классы
могут иметь разные конструкторы, которые я не знаю в области инициализации. Вот пример:
public class UpgradeAction : IAction
{
protected readonly IUpgradeManager upgradeManager;
public UpgradeAction(IUpgradeManager upgradeManager)
{
this.upgradeManager = upgradeManager;
}
public void Process(BaseRequest request)
{
upgradeManager.DoUpgrade(request);
}
}
Пока я получаю ошибку конструктора ParameterLess, если я использую эту функцию
var t = (IAction)Activator.CreateInstance(typeOfAction);
Этот возвращает нулевой объект.
var t = (IAction)serviceProvider.GetService(typeOfAction);
Есть ли способ инициализации конфигурации IOC для включения такого рода реализации? Так что конкретный конструктор нужного класса используется для выполнения инъекции.
На самом деле я добавил в свой стартап это и многое другое. Весь мой IOC работает, если я не пройду мимо этого ActionManager (ТАК IUpgradeManager внедряется непосредственно в мой контроллер API). Так что я мог бы сделать это, и все, но я хочу использовать этот ActionManager, чтобы включить конвейер одной команды в разные процессы для создания некоторой подключаемой архитектуры.
public void Startup(IServiceCollection services)
{
services.AddTransient<IUpgradeManager, UpgradeManager>();
services.AddTransient<IAction, UpgradeAction>();
AutoMapper.DefaultMappers(typeof(DataLink).Assembly);
}