Конфигурация
У меня есть:
- A. net core MVC app project
- Проект модуля, содержащий
- Контроллер (MyController),
- Интерфейс репозитория (IMyRepository)
- Репозиторий (MyRepository, который реализует IMyRepository и IRepository)
Основное приложение. net ссылается на проект модуля
Я использовал Scrutor в приложении MVC, чтобы захватить все классы, которые реализуют IRepositoy
в любых ссылочных проектах, и зарегистрировать их в службах. коллекция:
public static void RegisterAllTypes<T>(this IServiceCollection services, ServiceLifetime lifetime = ServiceLifetime.Scoped)
{
var entryAssembly = Assembly.GetEntryAssembly();
var referencedAssemblies = entryAssembly.GetReferencedAssemblies().Select(Assembly.Load);
var assemblies = new List<Assembly> { entryAssembly }.Concat(referencedAssemblies).ToArray();
services.Scan(
x =>
{
x.FromAssemblies(assemblies)
.AddClasses(classes => classes.AssignableTo(typeof(T)))
.AsImplementedInterfaces()
.WithLifetime(lifetime);
});
}
Проблема
Если я изучу коллекцию сервисов, то увижу, что IMyRepository зарегистрирован и должен решить MyRepository . Тем не менее, хранилище при внедрении в MyController , как показано ниже:
private readonly IMyRepository _myRepository ;
public MyController(IMyRepository myRepository )
{
_myRepository = myRepository;
}
выдает ошибку:
Невозможно разрешить службу для типа 'IMyRepository', в то время как пытаясь активировать MyController.
Если только ...
После регистрации репозиториев через Scrutor я поставил
var test = typeof(IMyRepository);
В этот момент все работает, как ожидалось. Но это побеждает весь смысл автоматизации c регистрации зависимостей.
Любая помощь с благодарностью.