Использование Singleton, чтобы сделать данные доступными для всех классов - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть AuthenticationController, который проверяет базу данных, чтобы убедиться, что учетные данные действительны. После проверки я создаю экземпляр класса (см. Ниже) и сохраняю соответствующие части из таблицы.

AuthenticationController.cs

public class AuthenticationController : Controller
{
    private readonly IEmployeeDetails ED;

[HttpPost]
public ActionResult Login(Login loginItem)
{
      ED.Employee_Number = (string)employeeDataTable.Rows[0]["Employee_Number"].ToString(); // crash because ED is null ?

Я хочу поделиться этим экземпляром объект со всеми моими контроллерами для всех моих представлений.

Каков наилучший способ сделать это? (класс выглядит так, но с большим количеством полей)

public class EmployeeDetails : IEmployeeDetails
{
       public int EmployeeNumber {get; set;}
}

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
     services.AddSingleton<IEmployeeDetails, EmployeeDetails>();
     services.AddControllersWithViews();
}

Что я делаю не так?

1 Ответ

2 голосов
/ 26 февраля 2020

Вы должны внедрить свой сервис в конструктор контроллера следующим образом:

public AuthenticationController(IEmployeeDetails ED){
this.ED = ED;
}

plus, попробуйте использовать AddScoped вместо AddSingleton, объекты Scoped одинаковы в запросе, но различны для разных запросов, Объекты Singleton одинаковы для каждого объекта и каждого запроса.

...