Я использую пакет Unity.WebApi NuGet (Unity 4.0.1 и Unity.WebApi 5.2.3) в решении ASP.NET WebApi. Проблема, с которой я сталкиваюсь, заключается в том, что при попытке запустить код я получаю ошибку: Make sure that the controller has a parameterless public constructor
. Я искал похожие темы здесь, но я не смог найти нить, которая соответствовала моей проблеме.Unity.WebApi | Удостоверьтесь, что контроллер имеет безкоммертный открытый конструктор
Пожалуйста, не просто скажите «Добавить конструктор без параметров», потому что он показывает, что вы, очевидно, не знаете, что такое IoC, и почему это утверждение совершенно не имеет смысла и побеждает цель IoC. Я говорю это, потому что я видел это на многих других темах, на которые я смотрел до сих пор.
Это мой Startup.cs (я использую Owin, так что я не имею Global.asax):
public void Configuration(IAppBuilder app) {
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
// Registering unity stuff
UnityConfig.RegisterComponents();
app.UseWebApi(config);
}
Это мой UnityConfig.cs:
public static class UnityConfig {
public static void RegisterComponents() {
var container = new UnityContainer();
// Register controller
container.RegisterType<MyController>();
// Register interface
container.RegisterType<IService, Service>();
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
}
}
Это мой API контроллер:
public class MyController : ApiController {
private IService service
public MyController(IService service) {
this.service = service;
}
public IHttpActionResult Get() {
return Ok("All systems go!");
}
}
EDIT
Я использовал выражения для использования, потому что люди с трудом понимают, что проблема возникает, независимо от того, существуют ли там операторы.
Можете ли вы рассказать о классе обслуживания? Вам не хватает регистрации любого класса, требуемого классом Service? – Noor
Может быть, ваш контейнер находится перед тем, как он будет использоваться MVC? Это нелогично, что это заставило бы эту ошибку, но, может быть. Попробуйте использовать «var container = new UnityContainer()» из блока использования. – NightOwl888
Noor Нет деталей для обмена. Предположим, что у него есть метод, который печатает «Hello World». NightOwl888 Я изначально сделал это, так что это не тот случай. Использование пришло позже по линии, пытаясь понять эту проблему. Я думаю, что это что-то неуловимое, потому что это основано на Овине, но я не уверен. –