MVC 5와 최신 Ninject.MVC5 Nuget 패키지를 사용하여 새로운 프로젝트를 설정하려고합니다. 그러나 "이 개체에 대해 정의 된 매개 변수가없는 생성자"예외가 나타납니다.ASP.NET MVC5에서 Ninject를 사용하는 방법
저는 주위를 둘러 보았고 자신의 DependencyResolver를 만들어야한다고 말하는 Ninject MVC 5 Nuget 패키지 이전의 많은 답변을 발견했습니다. 나는 또한 내가 현재 관심이없는 WebApi2에 대한 많은 답변을 발견했다.
이 답변 - MVC5, Web API 2 and Ninject - 내 질문에 직접적으로 대답하지 않는 동안 모든 것이 최신 Nuget 패키지와 함께 작동하고 생성 된 코드를 살펴보아야 함 NinjectWebCommon.cs에서는 "그냥 작동"하는 것처럼 보입니다.
현재 코드를 사용하면 NinjectWebCommon.cs에 중단 점을 넣을 수 있으며 내 구성을 실행하므로 Ninject가 MVC에 올바르게 등록되지 않은 것일 수 있습니다.
내 주된 질문은 MVC 5 용 최신 누젠트 패키지가 더 이상 클래스 나 코드없이 작동해야한다는 것입니다.
종속성 해결 프로그램 클래스에 대해 NinjectWebCommon.cs에서 만든 커널을 어떻게 가져야합니까?
재미있는 일이 생기면 다음은 내 App_Start \ NinjectWebCommon.cs입니다. 변경된 유일한 줄은 NinjectModule 인 MyProject.NinjectConfiguration을 등록하는 것입니다. 어떤 이유 때문에
[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(MyProject.App_Start.NinjectWebCommon), "Start")]
[assembly: WebActivatorEx.ApplicationShutdownMethodAttribute(typeof(MyProject.App_Start.NinjectWebCommon), "Stop")]
namespace MyProject.App_Start
{
using System;
using System.Web;
using Microsoft.Web.Infrastructure.DynamicModuleHelper;
using Ninject;
using Ninject.Web.Common;
public static class NinjectWebCommon
{
private static readonly Bootstrapper bootstrapper = new Bootstrapper();
/// <summary>
/// Starts the application
/// </summary>
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);
}
/// <summary>
/// Stops the application.
/// </summary>
public static void Stop()
{
bootstrapper.ShutDown();
}
/// <summary>
/// Creates the kernel that will manage your application.
/// </summary>
/// <returns>The created kernel.</returns>
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
try
{
kernel.Bind<Func<IKernel>>().ToMethod(ctx =>() => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
RegisterServices(kernel);
return kernel;
}
catch
{
kernel.Dispose();
throw;
}
}
/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
kernel.Load(new MyProject.NinjectConfiguration());
}
}
}
'컨트롤러의 생성자'는 어떻게 생겼습니까? 또한 다음과 같이 인스턴스를 바인드해야한다 :'커널 .Bind() .ToSelf() .InRequestScope(); 또는'kernel.Bind (). To ();'inside 'RegisterServices (IKernel kernel)'메쏘드 –
Catalin
@RaraituL 고마워요, 내가 완전히 바보가 된 곳을 지적 해주었습니다! – Dan