Обновите значения переменных базового контроллера, но все производные контроллеры не обновляются в ASP.NET Ядро

#c# #asp.net-core-mvc

#c# #asp.net-core-mvc

Вопрос:

Это мой BaseController :

 public abstract class BaseController : Controller
{
    public Int64 CompanyId { get; set; } // I need to update this property
}
 

У меня есть еще 2 контроллера, CompanyController :

 public class CompanyController : BaseController
{
   
    public IActionResult ChangeCompany(long CompanyId = 35)  //
    {   
        base.CompanyId = CompanyId;
        // other code
    }

    public IActionResult GetCompany()  //
    {   
        return base.CompanyId  // return 35
    }
}
 

и AccountController :

 public class AccountController : BaseController
{
    public IActionResult GetCompany()  //
    {   
        return base.CompanyId  // return 0
    }
}
 

Как я могу получить обновленное CompanyId значение из AccountController ?

Комментарии:

1. нет. потому что ваш AccountController и CompanyController — это разные экземпляры — с собственным значением для CompanyID . вы должны переместить эту функциональность в сервис, который вместо этого используют оба контроллера.

Ответ №1:

Вы не можете. Каждый объект индивидуален, а базовый класс — это просто шаблон, который расширяют ваши другие классы. Каждый new объект будет создавать и поддерживать свою собственную CompanyId переменную, поэтому вы не можете и не должны изменять одну, изменяя другую.

Проверьте static ключевое слово, если вам нужно только одно значение для всех классов public static Int64 CompanyId { get; set; }

В основном это:

 public class CompanyController : BaseController
{
   
    public IActionResult ChangeCompany(long CompanyId = 35)  //
    {   
        base.CompanyId = CompanyId;
        // other code
    }

    public IActionResult GetCompany()  //
    {   
        return base.CompanyId  // return 35
    }

}
 

То же самое, что и это (хотя без наследования вы даже не можете знать, какие части имеют два общих класса):

 public class CompanyController
{
    public Int64 CompanyId { get; set; } // I need to update this property
    public IActionResult ChangeCompany(long CompanyId = 35)  //
    {   
        base.CompanyId = CompanyId;
        // other code
    }

    public IActionResult GetCompany()  //
    {   
        return base.CompanyId  // return 35
    }

}