gpt4 book ai didi

c# - 如何在 ActionFilters 中使用通用基本 Controller

转载 作者:行者123 更新时间:2023-12-04 08:20:42 27 4
gpt4 key购买 nike

我正在使用 ILogger<T>并希望它包含在我的基本 Controller 中,因为每个 Controller 都应该使用它。
我将每个派生类定义为 UsersController : BaseController<UsersController>在我的基类中,我分配了 ILogger<T>在我尝试访问我需要知道如何转换它的 ActionFilter 中的 Controller 之前,它工作正常。
我如何实现这一目标或以更好的方式完成同样的事情。

// Base Controller
public class BaseController<T> : ControllerBase
{
protected readonly IOptions<AppSettings> _appSettings;
protected readonly ILogger<T> _logger;
}

// Instance Controller
public class UsersController : BaseController<UsersController>
{
public UsersController(ILogger<UsersController> logger,
IOptions<AppSettings> appSettings)
: base(logger, appSettings)
{
...
}

// ActionFilter used to set viewbag on all pages/layout pages
public class ViewBagActionFilter : ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext context)
{
// Can't use typeof() or nameof()
if (context.Controller.GetType().BaseType.Name == "BaseController")
{
// This doesn't work either
var controller = context.Controller as BaseController;
controller.ViewBag.Username = controller?.User?.Username;
}

base.OnResultExecuting(context);
}
}

最佳答案

我不知道这是否会有所帮助,但 ILogger<T>继承自 ILogger所以你可以让你的基本 Controller 不是通用的:

public class BaseController : ControllerBase
{
protected readonly IOptions<AppSettings> _appSettings;
protected readonly ILogger _logger;
}
并且您继承的 Controller 中的构造函数仍然可以工作。

关于c# - 如何在 ActionFilters 中使用通用基本 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65513613/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com