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);
}
}