Мы используем .NET Core Dependency Injection и имеем следующую структуру классов
public interface IValidator<TEntity, TMessageKey> {
ValidationResult<TMessageKey> Validate(TEntity entityToValidate);
}
public abstract class BaseValidator<TEntity, TMessageKey> : IValidator<TEntity, TMessageKey> {
// code omitted
}
public class ConcreteValidator : BaseValidator<ConcerteEntity, MyMessageKey>
{
// code omitted
}
Конечно, может быть много конкретных валидаторов, и я хочу их зарегистрировать в пакетном режиме.
Как быЯ достигаю этого?
По сути, я хочу зарегистрировать несколько закрытых универсальных типов в одном открытом универсальном типе.
Все, что я пробовал, до сих пор не удавалось.
- Регистрация
BaseValidator<,>
в `ConcreteValidator - Регистрация
IValidator<,>
в BaseValidator<,>
Я уже прочитал несколько статей / сообщений об этом, и яЯ даже не уверен, возможно ли это с DI ядра *.
РЕДАКТИРОВАТЬ: Вот моя последняя попытка (я использую расширение NetCore.AutoRegisterDi)
var data = services.RegisterAssemblyPublicNonGenericClasses(Assembly.GetExecutingAssembly())
.Where(x => x.BaseType.IsGenericType && x.BaseType.GetGenericTypeDefinition() == typeof(BaseValidator<,>));
foreach(var d in data.TypesToConsider)
{
var type = typeof(BaseValidator<,>);
var genericType = type.MakeGenericType(d.BaseType.GenericTypeArguments);
services.AddScoped(genericType, d);
}