У меня такая же проблема, как и у described here, и моя настройка почти identical to this, которая фактически основана на this guide. Когда я доступ к методу в мой контроллер я получаю это произошлоИспользование простого инжектора в веб-API и OWIN
Ошибка при попытке создать контроллер типа 'TestController. Удостоверьтесь, что контроллер имеет безкоммертный публичный конструктор .
Вот трассировки стека
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator
.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor,
Type controllerType)\r\n
at System.Web.Http.Controllers.HttpControllerDescriptor
.CreateController(HttpRequestMessage request)\r\n
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()
А вот трассировки стека внутреннее исключение в
at System.Linq.Expressions.Expression.New(Type type)\r\n
at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType)\r\n
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator
.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator)\r\n
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator
.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
Вот что мой контроллер выглядит
public class TestController : ApiController
{
private readonly ITestRepo _repo;
public TestController(ITestRepo repo)
{
_repo = repo;
}
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
public string Get(int id)
{
return _repo.GetId(id);
}
}
А вот как настроить Простой инжектор
public class Startup
{
public void Configuration(IAppBuilder app)
{
// Create the container as usual.
var container = new Container();
// Register your types, for instance using the RegisterWebApiRequest
// extension from the integration package:
container.RegisterWebApiRequest<ITestRepo, TestRepo>();
container.RegisterWebApiControllers(GlobalConfiguration.Configuration);
container.Verify();
GlobalConfiguration.Configuration.DependencyResolver =
new SimpleInjectorWebApiDependencyResolver(container);
//
ConfigureOAuth(app, container);
var config = new HttpConfiguration();
WebApiConfig.Register(config);
app.UseWebApi(config);
}
}
http://blog.ploeh.dk/2012/09/28/DependencyInjectionandLifetimeManagementwithASP.NETWebAPI/ – Aron
Из трассировки стека кажется что Simple Injector * не * участвует при разрешении контроллеров. Проверьте, что значение 'GlobalConfiguration.Configuration.DependencyResolver' находится во время выполнения. Вероятно, что-то сбрасывается. Вам нужно выяснить, где это происходит. В методах 'WebApiConfig.Register' или' app.UseWebApi' возможно? – Steven
Я думаю, что это «задействовано», потому что при вызове «container.Verify» происходит сбой каждого из контроллеров ctor. Если я правильно понял, это то, что для «Verify». –