Я использовал WebForms (устаревшие) + 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);
}
}
- Авторизация на основе куки.
- SimpleInjector разрешает все зависимости, и не может обнулять параметр . если параметр равен нулю, исключение будет выдано при работе с конструктором.
Я получаю исключение NullReferenceException (user
равно нулю) по запросу /PostMethod
.
Я искал любое место, где ссылка может стереть. Ничего такого. Ссылка не может переписать. похоже, GC очистил все ссылки.
ПРИМЕЧАНИЕ. Я не могу воспроизвести это при отладке. Я знаю об этой проблеме из журналов.
ПРИМЕЧАНИЕ1: MyCustomController
создано успешно (user
не равно NULL).
Отправьте запрос, чтобы бросить ожидание, что пользователь является нулем.