c# - 从构造函数 NRE ASP.NET 传递的参数
问题描述
我使用了 WebForms (legacy) + ASP.NET MVC + SimpleInjector
public abstract class CustomBaseController : Controller
{
protected User user;
protected IAppDbContext repo;
public CustomBaseController(User user, IAppDbContext repo)
{
this.user = user;
this.repo = repo;
}
}
// my controller
[MyCustomAuthorize]
public class MyCustomController : CustomBaseController
{
public MyCustomController(User user, IAppDbContext repo) : base(user, repo)
{
}
[HttpPost]
public ActionResult PostMethod()
{
user.Name = "NewUserName"; // throw NullReferenceException that user is null
// some logic
// some logger
}
}
// user entity
public class User
{
public Guid Id { get; protected set; }
public string Email { get; protected set; }
public string DisplayName { get; protected set; }
public string FirstName { get; protected set; }
public string LastName { get; protected set; }
// and other properties
}
// Register DI
private static void InitializeContainer()
{
var container = new Container();
container.Register<IUserSessionManagement, UserSessionManagement >(Lifestyle.Scoped);
container.Register<User>(() => container.GetInstance<UserSessionManagement>().UserSession, Lifestyle.Scoped);
DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
}
// Wrapper for User
public class UserSessionManagement : IUserSessionManagement
{
public User UserSession { get; }
public UserSessionManagement(IAppDbContext repo)
{
UserSession = (HttpContext.Current.Session[SESSION_AUTHENTICATED_USER] as User) ?? new User(Guid.Empty, null, null);
}
}
- 基于 cookie 的授权。
- SimpleInjector 解决所有依赖项并且不能为空参数。如果参数为空,则在构造函数上时将引发异常。
我根据请求捕获 NullReferenceException ( user
is null) 。/PostMethod
我一直在寻找可以擦除参考的任何地方。没有什么。引用不能重写。看起来GC已经清理了所有链接。
注意:我无法在调试中重现这一点。我从日志中知道这个问题。
NOTE1:MyCustomController
创建成功(user
不为空)。发布请求以引发用户为空的期望。
解决方案
看看这个答案在这里
我们必须查看您的 CustomBaseController 才能看到更多信息。
public MyCustomController() : base()
{
}
您可能只需要一个无参数的构造函数。
推荐阅读
- android - Kotlin - 获得毫秒时间的问题
- sql - 在字符串中搜索多个关键字值
- python - TypeError:无法连接“str”和“_Printer”对象
- javascript - 如何使用用户名登录 Meteor.loginWithPassword
- python - “TypeError: can't pickle _thread.RLock objects”,同时使用 pickle 保存 Facebook Prophet 模型
- c# - WPF UniformGrid 动态内容
- javascript - react-native如何分配多个.replace()作为变量?
- r - 在 R 中将数据帧转换为 TS
- ios - 在 DUNS 号码查找中显示组织列表,但这不是我的
- jbpm - variableScopes 只能解析变量名:JBPM7.32 中的 null