Вам не нужно иметь контроллер для каждой таблицы в вашей базе данных. В приведенном выше коде MembershipService - это код, который фактически создает запись (через репозиторий для пользователей).
Контроллеры должны представлять различные области и группы функций, которые предоставляет ваш сайт. Хотя во многих случаях у вас может быть контроллер с действиями «Просмотр», «Создание» и «Обновление», которые относятся к определенной сущности, которая относится к конкретной таблице базы данных, что не всегда и не всегда так.
Если имеет смысл иметь UsersController, потому что вы хотите просмотреть список пользователей или профиль конкретного пользователя, это нормально, но форма для создания пользователя не обязательно должна быть частью этого контроллера. Иметь членство в членстве, или администраторе, или в учетной записи, или в контроллере регистрации тоже нормально.
Обновление
Я постараюсь предоставить вам пример кода, как я ожидаю, что код будет выглядеть. Но вы можете иметь в виду кое-что еще, что тоже хорошо, нет единственно верного способа сделать это.
В вашем коде выше я не уверен, что делает ваш класс MembershipService. Кажется, на нем есть статический метод, который делает что-то, связанное с созданием пользователя. Я ожидаю, что ваш класс MembershipService должен вызывать ваш UserRepository для фактического создания пользователя. Но вам, вероятно, не нужен статический класс / метод для этого.
public class MembershipCreationResult
{
public User Member { get; private set; }
public MembershipCreateStatus MembershipCreateStatus { get; private set; }
public MembershipCreationResult(User user, MembershipCreateStatus status)
{
Member = user;
MembershipCreateStatus = status;
}
public bool Success
{
get { return MembershipCreateStatus == MembershipCreateStatus.Success; }
}
}
public class MembershipService
{
public IUserRepository { get; private set; }
public MembershipService(IUserRepository userRepository)
{
UserRepository = userRepository;
}
public MembershipCreateResult CreateUser(string name, string password, string email)
{
User member = UserRepository.Create(name, password, email);
bool status = member != null ? MembershipCreateStatus.Success : MembershipCreateStatus.Failure;
return new MembershipCreationResult(status, member)
}
}
Я не очень внимательно посмотрел пример NerdDinner и не использовал поставщика членства ASP.NET, но концепция, которую я изложил выше, должна работать. Если MembershipService делает что-то отличное от того, что я обрисовал в общих чертах, вы можете создать новый сервис, чтобы обернуть функциональность и оставить существующий MembershipService в покое.