У меня есть проект ASP.NET MVC 5, использующий шаблон по умолчанию, который использует ASP.NET Identity 2. Знаете, тот, у которого этот ужасный бедный человек вводит зависимость с помощью OwinContext
и AccountController
.
Я успешно смог интегрировать SI 4.3.0 в проект, следуя этому примеру .Он показывает и старый синтаксис, но с некоторыми изменениями он заработал.Теперь я с удовольствием внедряю зависимости в AccountController
и могу легко написать тесты для него.
Проблема в том, что у меня также есть несколько контроллеров Web Api 2 в том же проекте MVC, и я 'Я не уверен, как мне интегрировать SI, чтобы он работал.
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// This ApiDependencyResolver is a custom class and as you can see,
// it's being "injected" a value from a static method. Awful. I want to replace this with SI.
config.DependencyResolver = new ApiDependencyResolver(DataAccessLayerFactory.GetInstance());
// Use a custom JSON formatter as well so that requests from
// the browser are returned as properly formatted JSON by default.
config.Formatters.Add(new ApiJsonFormatter());
// Set up the Web API routes.
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: ApiPrefix + "/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
}
}
Вышеуказанный метод вызывается в Application_Start
из Global_asax
с использованием GlobalConfiguration.Configure(WebApiConfig.Register);
.Но моя настройка контейнера выполняется в Startup.cs
(отмечен атрибутом OwinStartup
).
У меня уже есть регистрация для DataAccessLayer, и она хорошо работает для контроллеров MVC.Но как только я запускаю действие контроллера API, который в нем нуждается, я получаю ответ: An error occurred when trying to create a controller of type 'TenantsController'. Make sure that the controller has a parameterless public constructor.
Как я могу интегрировать SI в проект MVC5 с некоторыми контроллерами Api?