Razor 页面中的 BasePageModel

Kla*_*Jan 7 c# dependency-injection mediatr asp.net-core razor-pages

我目前正在使用 Razor Pages 和 Mediatr 将臃肿的 MVC .NET Core 应用程序重构为更简单的 .NET Core 应用程序。

在 MVC 方法中,有一个所有控制器都继承自的 BaseController。BaseController 处理 Mediatr DI。我将如何在 Razor Pages 中执行此操作?创建一个处理 Mediatr DI 的 BasePageModel 类是否明智,或者我应该将 Mediatr DI 包含在我创建的每个 PageModel 中?

Bra*_*ton 7

我使用 BasePageModel 类来保存通用代码和属性。子类获取 DI 注入的对象,然后将它们传递给基类,基类使用可选参数列表来处理它们。可能有更优雅的方法来完成此任务,但这对我来说效果很好。

public class BasePageModel : PageModel {
    public BasePageModel(params object[] list) {
        foreach (var item in list) {
            if (item is ILoggerFactory loggerFactory) {
                _logger = loggerFactory.CreateLogger("Projects");
            }
            if (item is ApplicationDbContext context) {
                _dbContext = context;
            }
            if (item is UserManager<ApplicationUser> manager) {
                _userManager = manager;
            }
            if (item is IHostingEnvironment env) {
                _environment = env;
            }
        }
    }

public class IndexModel : BasePageModel {

    public IndexModel(ApplicationDbContext context, UserManager<ApplicationUser> userManager, ILoggerFactory loggerFactory) :
        base(context, userManager, loggerFactory) { }
}
Run Code Online (Sandbox Code Playgroud)