Вот мой класс factory
, в обязанности которого входит возврат instance
на основе типа ввода.
public class ProcessFactory: IProcessFactory
{
public ProcessFactory(IProcess<ProcessSalaryRequest> processSalaryRequest,
IProcess<ProcessLeavesRequest> processLeavesRequest)
{
_processSalaryRequest = processSalaryRequest;
_processLeaveRequest = processLeavesRequest;
}
}
public IProcess GetInstance(string type)
{
Type atype;
if (Enum.TryParse(type, out atype))
{
switch (atype)
{
case Type.Type1:
return _processSalaryRequest ;
break;
case Type.Type2:
return _processLeaveRequest ;
break;
}
}
return null;
}
}
Это мой интерфейс. Неуниверсальный интерфейс и наследовать от него универсальный интерфейс.
public interface IProcess
{
void Process(string id);
}
public interface IProcess<T> : IProcess where T : class
{
}
Вот мои регистрации
builder.RegisterType<ProcessSalaryRequest>().As<IProcess<ProcessSalaryRequest>>().SingleInstance();
builder.RegisterType<ProcessLeavesRequest>().As<IProcess<ProcessLeavesRequest>>().SingleInstance();
Теперь, вот регистрация при регистрации factory
builder.Register(c => new ProcessFactory(c.Resolve<ProcessSalaryRequest>(),c.Resolve<ProcessLeavesRequest>())).As<IProcessFactory>().SingleInstance();
Я получаю ошибку ниже
'MyProject.ProcessSalaryRequest' не был зарегистрирован. Чтобы избежать этого исключения, либо зарегистрируйте компонент для предоставления услуги, проверьте регистрацию службы с помощью IsRegistered (), либо используйте метод ResolveOptional () для разрешения необязательной зависимости. '
Обновление
Вот ProcessSalaryRequest
public class ProcessSalaryRequest : IProcess<ProcessSalaryRequest>
{
private readonly IStatusClient _statusClient;
public ProcessSalaryRequest(IStatusClient statusClient)
{
_statusClient = statusResponseClient;
}
void Process(string id)
{
}
}
Диаграмма зависимости
DependencyResolutionException: Обнаружена циклическая зависимость компонента: MyProject.Engine -> MyProject.Broker -> MyProject.ProcessControl -> MyProject.Status -> MyProject.StatusManager -> MyProject.Prcoорес-> MyProject.ProcessSalaryRequest -> MyProject. *
Примечание: Processor
получает экземпляр, используя factory
, основываясь на некоторых бизнес-условиях.