Как получить значение сеанса в пользовательской библиотеке классов в приложении Core MVC - PullRequest
0 голосов
/ 09 января 2020

Я работаю над разными слоями в MVC. net core 3 проекте. Моя проблема в том, что мои контроллеры и представления находятся на одном уровне, а все службы, которые выполняют действия, связанные с БД, находятся на другом уровне библиотеки классов. Я хочу получить значения сеанса в моем слое обслуживания. Как я могу получить их? Я пробовал HttpContext в слое обслуживания, но он не работал.

Вот мой контроллер.

namespace CRM.Web.Controllers
{
    [Authorize]
    public class ContactController : Controller
    {
        private int UserID { get { return Convert.ToInt32(HttpContext.Session.GetInt32("UserID")); } }
        private string RoleName { get { return HttpContext.Session.GetString("RoleName"); } }

        private readonly ContactService _contactService;

        public ContactController(ContactService contactService)
        {
            _contactService = contactService;
        }

        public IActionResult Index()
        {
            return View();
        }
    }
}

А вот моя служба контактов.

namespace CRM.Service.Services.ContactService
{
    public class ContactService : IRepository<Contact>, IDisposable
    {
        public int UserID { get; set; }

        private readonly _DbContext _context;
        private readonly IMapper _mapper;
        public ContactService(_DbContext context, AutoMapperConfig autoMapperConfig)
        {
            _context = context;
            _mapper = autoMapperConfig.Mapper;
        }
    }
}

1 Ответ

0 голосов
/ 09 января 2020

System.Web.HttpContext.Current Должен дать вам доступ к текущим сеансам HttpContext, однако я бы не советовал использовать это в вашей библиотеке классов, если вы планируете вообще расширять свое приложение, используя явные переменные сеанса в пределах уровня обслуживания, который вы используете. По сути, сделать так, чтобы его можно было когда-либо использовать только как веб-приложение (если вы не планируете использовать его для чего-либо еще, то непременно для него go).

Если переменные текущего сеанса не требуется для инициализации этого класса, используйте метод setter для предоставления данных, таким образом, вы можете либо предоставить ему переменные, необходимые для сеанса, либо, если вы используете не в сети, вы можете передать ему эквивалентные переменные из альтернативного источника.

...