Вы можете создать новый service
.
public class MyHttpContextService : IMyHttpContextService
{
IHttpContextAccessor _httpContext;
public MyHttpContextService(IHttpContextAccessor httpContext)
{
_httpContext = httpContext;
}
public string CheckUserRoles()
{
try
{
var currentUser = _httpContext?.HttpContext?.Session?.GetCurrentUser<SessionContext>();
if (currentUser != null)
{
if(currentUser.Roles.Any())
{
if(!currentUser.Roles.Contains("Administrator"))
{
if(currentUser.Roles.Contains("Doctor"))
{
//do something here
}
else if (currentUser.Roles.Contains("Patient"))
{
//do something else here
}
}
}
}
else
{
// if currentUser == null
}
}
catch (Exception ex)
{
// exception handling
}
}
}
Обратите внимание, что строка
var currentUser = _httpContext.HttpContext.Session.GetCurrentUser<SessionContext>();
заменена на
var currentUser = _httpContext?.HttpContext?.Session?.GetCurrentUser<SessionContext>();
Создать соответствующий interface
.
public interface IMyHttpContextService
{
string CheckUserRoles();
}
В этом примере string
является типом возврата, но это необязательно.
Наконец, зарегистрируйте этот сервис, используя строку
services.AddScoped<IMyHttpContextService, MyHttpContextService>();
где services
- это
IServiceCollection services
Вместо AddScoped
, вы можете использовать AddTransient
или AddSingleton
. Подробнее о времени жизни объектов и внедрении зависимостей . Эти три ключевых слова определяют срок службы объекта или, в данном случае, службы.
Регистрация начинается с Startup.cs
(но, если честно, все начинается с Startup.cs
, отсюда и название). Подробнее о Startup.cs . Другими словами, в Startup.cs
вызовите метод
public void ConfigureServices(IServiceCollection services)
, который вызывается во время выполнения.
Внутри метода ConfigureServices
вызовите другой, например MapInterfaces
, для отображения интерфейса и передать его services
. Метод MapInterfaces
будет static
методом внутри ServiceExtensions.cs
.
public static void MapInterfaces(IServiceCollection services)
{
services.AddScoped<IMyHttpContextService, MyHttpContextService>();
}
Еще лучше создать расширение метод Подробнее о методах расширения .
ServiceExtensions.cs
- это класс static
, который является условием для создания метода расширения. Метод расширения также должен быть static
. Это будет сигнатура методов
static void MapInterfaces(this IServiceCollection services)
Конечно, не забудьте модификатор доступа (по крайней мере, такой же видимости, как у класса ServiceExtensions.cs
). Обратите внимание, this
ключевое слово.
Метод расширения MapInterfaces
из ServiceExtensions.cs
затем вызывается из ConfigureServices
метода из Startup.cs
следующим образом
services.MapInterfaces();
В конце концов, когда вы нужен метод CheckUserRoles
, назовите его так
_myHttpContextService.CheckUserRoles();
РЕДАКТИРОВАТЬ : вы изменили реализацию метода, но это не изменит способ, которым вы могли бы сделать остальное решение.