#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
}
}