Ошибка внедрения зависимости при попытке разрешить службу IRepository & Repositories - PullRequest
0 голосов
/ 05 января 2019

Это структура моего проекта

**MyApp.API**
/controllers
/repositories
/models
/helpers
startup.cs

startup.cs содержит

public void ConfigureServices(IServiceCollection services)
{
   services.AddCors();
   services.AddMvc();
   //Add our new middleware to the pipeline
   services.AddTransient<FactoryActivatedMiddleware>();

   //Add detection services container and device resolver service.
   services.AddDetection();
   //configure jwt authentication
   //... 

   //configure DI for application services
   services.AddScoped<IAccountsRepository, AccountsRepository>();
   services.AddScoped<IMetaRepository, MetaRepository>();
   services.AddScoped<INotificationsRepository, NotificationsRepository>();
   services.AddScoped<ILogsRepository, LogsRepository>();
   ...
   ...

}

Причина, по которой у меня есть файл startup.cs в проекте API выше, заключается в том, что он управляется другим разработчиком как проект. Я хочу добавить проект API вместе с проектом веб-сайта в качестве единого решения.

**MyApp.Web**
/controllers
/views
/webroot
startup.cs
program.cs

startup.cs содержит

public void ConfigureServices(IServiceCollection services)
{
    var controllerAssembly = Assembly.Load(new AssemblyName("MyApp.API"));
    services.AddMvc()
      .AddApplicationPart(controllerAssembly)
      .AddControllersAsServices();
}

Я получил это решение от по этой ссылке . Но выдает ошибку

Произошло необработанное исключение при обработке запроса. InvalidOperationException: невозможно разрешить службу для типа «MyApp.API.Repository.IAccountsRepository» при попытке активировать «MyApp.API.Controllers.AccountsController». Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites (Тип serviceType, Тип реализации типа, CallSiteChain callSiteChain, ParameterInfo [] параметры, bool throwIfCallSiteNotFound)

Похоже, в итоге я добавлю все сервисы из API при запуске в Интернете. Мне кажется, идея зарегистрировать каждую услугу не оптимальна.

Чем больше я об этом думаю - мне понадобится какой-то статический метод в API, в который я смогу внедрить службы веб-запуска. Таким образом, я могу запускать API как индивидуально, так и внутри веб-проекта

Есть ли лучший способ загрузить все необходимые классы MyApp.API без необходимости делать это вручную при запуске MyApp.Web?

...