BasePageModel в бритвенных страницах - PullRequest
0 голосов
/ 20 февраля 2019

В настоящее время я занимаюсь рефакторингом раздутого приложения MVC .NET Core в более простое приложение .NET Core с использованием Razor Pages и Mediatr.

В подходе MVC есть BaseController, от которого наследуются все контроллеры.BaseController управляет Mediatr DI.Как я буду делать это в Razor Pages?Целесообразно ли создавать класс BasePageModel, который обрабатывает DI Mediatr, или я должен просто включать DI Mediatr в каждую создаваемую мной PageModel?

1 Ответ

0 голосов
/ 21 февраля 2019

Я использую класс 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) { }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...