MvcExtensions: введение

MvcExtensions - это библиотека расширений для ASP.NET MVC. Библиотека предоставляет пользователю мощнейший инструмент для конфигурирования метаданных для ASP.NET MVC посредством fluent-интерфейса. Второй важной особенностью библиотеки является возведение использования IoC контейнера в абсолют (Можно инжектировать данные даже в атрибуты).

С чего начать?

Для начала вам необходимо определится с IoC контейнером, который вы хотите использовать - в MvcExtensions есть адаптеры для следующих популярных IoC контейнеров: Castle.Windsor, Unity, Ninject, StructureMap. Для этого вам необходимо установить соответствующую версию адаптера через nuget: Castle.Windsor, Unity, Ninject, StructureMap.

Затем вам необходимо унаследовать класс своего приложения от базового приложения для выбранного адаптера, например, MvcExtensions.Windsor.WindsorMvcApplication:

    //Global.asax.cs
    public class MvcApplication : WindsorMvcApplication {
        public MvcApplication() {
        }
    }

UPD По умолчанию в HttpAppication в качестве бутсраппер-методов создаются методы Application_Start и Application_End. MvcExtensions предоставляет альтернативные методы для этого OnStart и OnEnd. Необходимо использовать их, иначе код в метода Application_Start и Application_End не будет вызван.

Инициализируем IoC контейнер

Для инициализации вашего любимого IoC контейнера вам необходимо просто реализовать соответствующий интерфейс или унаследоваться от базового класса: IWindsorInstaller, Ninject.Modules.NinjectModule, StructureMap.Configuration.DSL.Registry, Microsoft.Practices.Unity.IModule. Например для Windosor:

    public class AccountInstaller : IWindsorInstaller {
        public void Install(IWindsorContainer container, IConfigurationStore store) {
            var registration = Component.For<IAuthenticationService>()
                .ImplementedBy<FormsAuthenticationService>()
                .LifeStyle.Transient;

            container.Register(registration);
        }
    }

Полученные таким образом классы нужно положить в ваше MVC приложение в любую папку, я рекомендую в /Infrastructure. Необходимо запомнить, что контроллеры таким образом инициализировать не требуется!.

Регистрация контроллеров

В MvcExtensions весь код, выполняющийся при старте приложения необходимо помещать в, так называемые, BootstrapperTask. Существуют некоторые стандартные таски, такие как например регистрация контроллеров. Для того, чтобы проинструктировать MvcExtensions, что вы хотите зарегистрировать свои контроллеры, необходимо всего-лишь включить задачу RegisterControllers в последовательность задач, выполняемых при старте:

    //Global.asax.cs
    public class MvcApplication : WindsorMvcApplication {
        public MvcApplication() {
            Bootstrapper.BootstrapperTasks
                .Include<RegisterControllers>();
        }
    }

После этого все контроллеры в вашем MVC приложении будут создаваться с помощью IoC контейнера.

Метаданные

MvcExtensions предлагает пользователям замену стандартному способу конфигурирования метеданных через DataAnnotations, посредством fluent-интерфейса для конфигурирования. Этот подход обладает феноменальной гибкостью и неограниченными возможностями для расширения.

Для того, чтобы использовать эту возможность в MvcExtensions необходимо также зарегистрировать ее:

    //Global.asax.cs
    public class MvcApplication : WindsorMvcApplication {
        public MvcApplication() {
            Bootstrapper.BootstrapperTasks
                .Include<RegisterControllers>()
                .Include<RegisterModelMetadata>();
        }
    }

Затем необходимо написать конфигурацию для ваших форм и моделей отображения:

    public class SignUpMetadata : ModelMetadataConfiguration {
        public SignUpMetadata() {
            Configure(x => x.Login)
                .DisplayName("Имя пользователя")
                .Required("Необходимо указать имя пользователя");

            Configure(x => x.Email)
                .DisplayName("Адрес электронной почты")
                .Required("Необходимоуказать адрес электронной почты")
                .AsEmail();

            Configure(x => x.Password)
                .DisplayName("Пароль")
                .Required("Необходимо указать пароль")
                .MinimumLength(6, " Длина пароля должна быть не меньше 6 символов")
                .AsPassword();

            Configure(x => x.ConfirmPassword)
                .DisplayName("Пароль еще раз")
                .Required("Необходимо указать подтверждение пароля")
                .AsPassword()
                .Compare("Password", "Пароль и подвтерждение пароля должны совпадать");
        }
    }

Заключение

На этом первый этап конфигурирования MvcExtensions завершен. Если что-то осталось непонятно - задавайте вопросы, буду стараться разъяснять.

comments powered by Disqus