#c# #asp.net #.net #visual-studio
#c# #asp.net #.net #visual-studio
Вопрос:
Я использую DependencyInjectionProvider, и когда я проверяю контейнер, я получаю нулевую ссылку на сеанс. Может кто-нибудь сказать мне, как это решить? Мой код выглядит следующим образом:
Код 1:
private Container Init()
{
var container = new Container();
container.Options.DefaultScopedLifestyle = new WebRequestLifestyle();
container.Register<ConnectionString>(() => UserContext.Current?.connectionString ?? new ConnectionString(ConfigurationManager.AppSettings["banco_cliente"]), ScopedLifestyle.Scoped);
SimpleInjectorContainer.RegisterMvc(container);
DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
container.Verify();
return container;
}
Код 2 (текущий атрибут UserContext):
public static Current Current
{
get
{
try
{
if (HttpContext.Current.Session["__contexto_do_usuario_logado__"] == null)
Inicializar();
return HttpContext.Current.Session["__contexto_do_usuario_logado__"] as Current;
}
catch
{
return null;
}
}
}
Комментарии:
1. Я не понимаю, как код в первом блоке кода имеет какое-либо отношение ко второму блоку кода. Куда вызывается
Init()
вызов? Какую инфраструктуру внедрения зависимостей вы используете?2. Init () — это метод, который вызывает атрибут, вызывающий проблему. Я думаю, что плагин вызывает SimpleInjector. Я новичок в C #, и это проект от компании, над которой я сейчас работаю
3.
Init
Вызывается в контексте пользовательского запроса? Если нет, то почему должен быть HttpContext? И если это так… тогда почему вы создаете контейнер в любое время, кроме запуска приложения?4. Вы добавили промежуточное программное обеспечение UseSession? Может быть не связано, но передайте его назад
5. Куда бы я поместил код промежуточного программного обеспечения? Я новичок в ASP.NET и это проект, к которому я недавно присоединился
Ответ №1:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//I'd put this toward the end of the code block but before your routing.
app.UseSession();
}
Я не верю, что сеансы включены по умолчанию. Добавление этой строки делает сеанс пригодным для использования. Я могу ошибаться.
Комментарии:
1. должен ли этот файл находиться в Startup.cs?
2. Я предположил, не проверяя… Это решение предназначено для aspnet.net основные проекты. Внутри вашего startup.cs у вас будет метод configure, просто нужно добавить строку