0
我有一个应用程序总是无法初次初始化控制器。它只发生在IIS中重新启动站点之后。从应用程序获得500回来后,我可以重新加载页面,然后一切正常。Ninject确保控制器只有在重新启动站点后才具有Owin和Web Api的无参数构造函数
无法通过google或SO找到类似的情况。
我使用了不少的NuGet包,他们是
- Ninject
- Ninject.Web.Common
- Ninject.Web.Common.OwinHost
- Ninject.Web.Common。虚拟主机提供商
- 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
已添加控制器代码,找到可能导致问题的任何内容? –