剃刀页面中的BasePageModel

时间:2019-02-20 10:16:44

标签: asp.net-core dependency-injection razor-pages mediatr

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

在MVC方法中,有一个BaseController,所有控制器都可以继承。 BaseController处理Mediatr DI。我将如何在Razor Pages中做到这一点?创建一个处理Mediatr DI的BasePageModel类是明智的选择还是我应该在我创建的每个PageModel中都包括Mediatr DI?

1 个答案:

答案 0 :(得分:0)

我正在使用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) { }
}