C# 如何修复“对象引用未设置为对象的实例”?
我在visual studio 2012 RC中创建了一个mvc4项目,并使用nuget添加了ninject.mvc3包。它创建了标准的NinjectWebCommon.cs文件,我对RegisterServices方法进行了如下编辑:C# 如何修复“对象引用未设置为对象的实例”?,c#,asp.net-mvc,dependency-injection,ninject,asp.net-mvc-4,C#,Asp.net Mvc,Dependency Injection,Ninject,Asp.net Mvc 4,我在visual studio 2012 RC中创建了一个mvc4项目,并使用nuget添加了ninject.mvc3包。它创建了标准的NinjectWebCommon.cs文件,我对RegisterServices方法进行了如下编辑: private static void RegisterServices(IKernel kernel) { kernel.Bind<IProfileRepository>().To<ProfileRep
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IProfileRepository>().To<ProfileRepository>().InSingletonScope();
}
我想在我的帐户控制器中访问我的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);
}
调用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);
}
}
除非更改配置,否则Ninject将抛出ActivationException,而不是为依赖项注入null。您应该检查哪个对象真正为空
例如,允许匿名访问意味着HttpContext.User就是null。除非您更改配置,否则Ninject将抛出ActivationException,而不是为依赖项注入null。您应该检查哪个对象真正为空
例如,允许匿名访问意味着HttpContext.User是空的。只是为了确保:您的Ninject依赖项解析程序是否已在MVC中注册?请检查NinjectWebCommon.cs文件的内容好吗?是否有类似DependencyResolver.SetResolver…?@STO没有,我如何添加它?请检查此项以确保:您的Ninject依赖项解析程序是否已在MVC中注册?请检查NinjectWebCommon.cs文件的内容好吗?是否有类似DependencyResolver.SetResolver…?@STO没有,我如何添加它?请检查此项
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}