Это структура моего проекта
**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?