Вам нужно создать обертку вокруг статического класса Roles
, чтобы вы могли внедрить фиктивную реализацию, которой вы управляете.В основном это, вероятно, будет похоже на ваши MembershipService
и FormsService
(вероятно, назовите его IRoleService
) и будет нуждаться в методе GetAllRoles()
.
Вы можете создать реализацию по умолчанию (которая будет просто делегировать текущему статическому классу) в конструкторе null arg для вашего контроллера (что, как я думаю, происходит с вашими членством и службами форм), и предоставить свойство дляпозволяют вам переопределить его таким же образом, как и другие.
Другой вариант - расширить службу членства, чтобы позволить вам вызывать этот метод, а не создавать другую службу специально для ролей.Принцип ответственности, поэтому это не обязательно хорошая идея, но это означает, что вам не нужно вводить другую зависимость, и можно утверждать, что получение ролей члена входит в сферу обслуживания участников.
Если честно, я думаю, что вам лучше изменить свой элемент управления, чтобы иметь конструктор, который явно запрашивает реализации службы членства, службы форм и службы ролей и предоставляет имитации в тестах.зависимости контроллера есть.Затем вам нужно будет перейти к новому способу создания контроллера, так как по умолчанию их можно создавать, только если они имеют конструкторы по умолчанию.У вас есть несколько вариантов здесь.Либо сохраняйте выбранный вами вариант и используйте значения по умолчанию, либо используйте собственный ControllerFactory
.Некоторые подробности здесь .Я предпочитаю подход ControllerFactory
лично.