Razor 页面中的 BasePageModel
BasePageModel in Razor Pages
我目前正在使用 Razor Pages 和 Mediatr 将一个臃肿的 MVC .NET Core 应用程序重构为一个更简单的 .NET Core 应用程序。
在 MVC 方法中,有一个所有控制器都继承自的 BaseController。 BaseController 处理 Mediatr DI。我将如何在 Razor Pages 中执行此操作?创建一个处理 Mediatr DI 的 BasePageModel class 是否明智,或者我应该只在我创建的每个 PageModel 中包含 Mediatr DI?
我正在使用 BasePageModel class 来保存公共代码和属性。 subclasses 获取 DI 注入的对象,然后将它们传递给基础 class,基础 class 使用可选参数列表处理它们。可能有更优雅的方法来完成此操作,但这对我来说效果很好。
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) { }
}
我目前正在使用 Razor Pages 和 Mediatr 将一个臃肿的 MVC .NET Core 应用程序重构为一个更简单的 .NET Core 应用程序。
在 MVC 方法中,有一个所有控制器都继承自的 BaseController。 BaseController 处理 Mediatr DI。我将如何在 Razor Pages 中执行此操作?创建一个处理 Mediatr DI 的 BasePageModel class 是否明智,或者我应该只在我创建的每个 PageModel 中包含 Mediatr DI?
我正在使用 BasePageModel class 来保存公共代码和属性。 subclasses 获取 DI 注入的对象,然后将它们传递给基础 class,基础 class 使用可选参数列表处理它们。可能有更优雅的方法来完成此操作,但这对我来说效果很好。
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) { }
}