Объяснение регистрации
Одна проблема заключается в том, что вы регистрируете свой DependencyResolver с помощью API регистрации распознавателя MVC, который, к сожалению, отличается от API регистрации распознавателя WebAPI. Вместо этого вы хотите сделать следующее::
public void Configuration(IAppBuilder app)
{
var services = new ServiceCollection();
ConfigureServices(services);
var resolver = new DefaultDependencyResolver(services.BuildServiceProvider());
HttpConfiguration config = new HttpConfiguration();
config.DependencyResolver = resolver;
app.UseWebApi(config);
}
Также обратите внимание, что интерфейс IDependencyResolver
определяется отдельно в System.Web.Http , поэтому ваш класс DefaultDependencyResolver
должен быть обновлен для его получения.
Одна вещь, которая изменилась в этом интерфейсе, это то, что существует BeginScope
API. Чтобы реализовать это, вызовите метод расширения CreateScope , представленный на IServiceProvider
в Microsoft.Extensions.DependencyInjection, чтобы получить новую область. Затем передайте провайдера из этой области в новый экземпляр вашего DefaultDependencyResolver.
public IDependencyScope BeginScope()
{
return new DefaultDependencyResolver(this.serviceProvider.CreateScope().ServiceProvider);
}
Полный пример
Пример блога, который вы использовали для MVC, использовал OWIN. Когда я решил сделать полный пример, я столкнулся с той же ошибкой, что и вы, и это произошло потому, что я неправильно настроил OWIN, поэтому никогда не вызывали Startup. Вот полный рабочий пример использования Microsoft.Extensions.DependencyInjection для внедрения в контроллеры MVC и WebAPI:
https://github.com/ryandle/MVC_WebApi_DI_Example