C #에서 MVC 프레임 워크를 사용하여 응용 프로그램을 만들고 있습니다. 우리는 모든 사용자를 포함하는 저장소 'uitlenerRepository'를 만들고 싶습니다.
RegisterServices 클래스의 NinjectWebCommon에서 Ninject를 사용하여 저장소를 바인딩했습니다.
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.Bind<IMateriaalRepository>().To<MateriaalRepository>().InRequestScope();
kernel.Bind<IReservatieRepository>().To<ReservatieRepository>().InRequestScope();
kernel.Bind<IUitlenerRepository>().To<UitlenerRepository>();
kernel.Bind<UitleenAppContext>().ToSelf().InRequestScope();
}
}
보시다시피 다른 리포지토리에서 동일한 방법을 시도했는데 성공했습니다. 다른 저장소의 유일한 차이점은 미리 정의 된 클래스 'AccountController'에서 새 저장소를 만든다는 것입니다. 그 수업에서는 새 사용자를 쉽게 추가 할 수 있기 때문입니다. 이 클래스에서는 빈 생성자를 만들어 세 번째 매개 변수로 추가했습니다.
public class AccountController : Controller
{
private ApplicationSignInManager _signInManager;
private ApplicationUserManager _userManager;
private IUitlenerRepository uitlenerRepository;
public AccountController()
{
}
public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager, IUitlenerRepository uitlenerRepository)
{
UserManager = userManager;
SignInManager = signInManager;
this.uitlenerRepository = uitlenerRepository;
}
새 사용자를 저장소에 추가 할 수 없습니다. 디버깅 할 때 저장소의 값이 null이라는 것을 알게되었고 바인딩이 제대로 작동하지 않음을 나타냅니다.
누구든지이 문제를 해결하는 방법을 알고 있습니까?
AccountController()
의 ctor는 그 이유의 널 (null)입니다, 사용하고 있습니다. Ninject는 해결할 수있는 매개 변수가 가장 많은 생성자를 선택합니다. 나는 ApplicationUserManager
또는 ApplicationSignInManager
바인딩이 필요하다고 생각합니다 . AccountController()
매개 변수가없는 ctor 를 제거하면 ninject가 예외를 발생시키고 다른 ctor를 사용할 수없는 이유를 정확히 알려줍니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다