1

Visual Studio 2012 RCでmvc4プロジェクトを作成し、nugetを使用してninject.mvc3パッケージを追加しました。標準のNinjectWebCommon.csファイルを作成し、RegisterServicesメソッドを次のように編集しました。

private static void RegisterServices(IKernel kernel)
        {
            kernel.Bind<IProfileRepository>().To<ProfileRepository>().InSingletonScope(); 
        }    

これが私のインターフェースとプロファイルリポジトリクラスです:

public interface IProfileRepository
    {
        void CreateProfile(UserProfile profile);
    }



public class ProfileRepository : IProfileRepository
    {
        private EFDbContext context = new EFDbContext();

        public void CreateProfile(UserProfile userProfile)
        {
            context.UserProfiles.Add(userProfile);
            context.SaveChanges();
        }

    }

次のように、アカウントコントローラーでIProfileRepositoryにアクセスしたいと思います。

        private readonly IProfileRepository profileRepository;

        public AccountController(IProfileRepository repo){
            profileRepository = repo;
        }
        [AllowAnonymous]
        [HttpPost]
        public ActionResult Register(RegisterModel model)
        {
            if (ModelState.IsValid)
            {
                // Attempt to register the user
                MembershipCreateStatus createStatus;
                Membership.CreateUser(model.UserName, model.Password, model.Email, passwordQuestion: null, passwordAnswer: null, isApproved: true, providerUserKey: null, status: out createStatus);

                if (createStatus == MembershipCreateStatus.Success)
                {
                    profileRepository.CreateProfile(new UserProfile
                    {
                        UserId = (Guid)Membership.GetUser(HttpContext.User.Identity.Name).ProviderUserKey,
                        FirstName = model.FirstName,
                        LastName = model.LastName,
                        School = model.School,
                        Major = model.Major
                    });
                    FormsAuthentication.SetAuthCookie(model.UserName, createPersistentCookie: false);
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    ModelState.AddModelError("", ErrorCodeToString(createStatus));
                }
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }

Object reference not set to an instance of an objectオブジェクトが呼び出されたときにエラーが発生するため、オブジェクトprofileRepostoryが注入されていない可能性があります。誰かが何が悪いのか知っていますか?ありがとう!

編集:これが私のglobal.asaxファイルです:

public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
4

1 に答える 1

4

構成を変更しない限り、Ninjectは依存関係をActivationException注入するのではなくスローします。nullどのオブジェクトが実際にあるかを確認する必要がありますnull

たとえば、匿名アクセスを許可するHttpContext.Userことは、nullであるという大きなヒントです。

于 2012-07-19T20:54:00.320 に答える