У меня есть приложение, которое всегда не может инициализировать контроллеры только в первый раз. Это происходит только после перезапуска сайта в IIS. После получения 500 обратно из приложения я могу перезагрузить страницу, и после этого все будет хорошо.Ninject Убедитесь, что контроллер имеет конструктор без параметров с Owin и Web Api только после перезапуска сайта.
Не удалось найти аналогичный сценарий через google или SO.
Я использую довольно много NuGet пакетов, они
- Ninject
- Ninject.Web.Common
- Ninject.Web.Common.OwinHost
- Ninject.Web.Common. WebHost
- Ninject.Web.WebApi
- Ninject.Web.WebApi.OwinHost
Это класс, который делает конфигурации
[assembly: OwinStartup(typeof(MyNameSpace.MyClass))]
namespace MyNameSpace
{
internal class MyClass
{
public void Configuration(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
var kernel = CreateKernel();
app.UseNinjectMiddleware(() => kernel);
app.UseNinjectWebApi(config);
config.EnsureInitialized();
}
private IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Settings.InjectNonPublic = true;
kernel.Bind<IMyDependency>().To<MyDependency>().InSingletonScope();
// bindings
return kernel;
}
}
}
Вот что трассировка стека выглядит, если это помогает
System.InvalidOperationException: An error occurred when trying to create a controller of type 'MyController'. Make sure that the controller has a parameterless public constructor. ---> System.ArgumentException: Type 'MyController' does not have a default constructor
at System.Linq.Expressions.Expression.New(Type type)
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator)
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
--- End of inner exception stack trace ---
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage request)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()
Что может вызвать приложение к сбою в первый раз, но работа впоследствии? Любая помощь будет принята с благодарностью
редактирования: контроллер код выглядит
public class MyController : ApiController
{
private readonly MyDependency _dependency;
internal PathDeviationReportingController(MyDependency dependency)
{
_dependency = dependency;
}
/// <summary>
/// Do Something
/// </summary>
/// <response code="200"></response>
[HttpGet]
[Route("route/dosomething")]
[SwaggerResponse(200)]
public IHttpActionResult DoSomething()
{
return Ok();
}
}
Я так удален Ninject.Common.WebHost и это ничего не изменилось. все еще есть проблема.
отредактирован, чтобы обновить то, что связывание кода на самом деле выглядел *
Не могли бы вы опубликовать код 'PathDeviationReportingController'? – nozzleman
был добавлен код контроллера, укажите все, что может вызвать проблемы? –