ASP.NET MVC, Spring.NET, NHibernate начальная настройка / пример / учебное пособие - PullRequest
7 голосов
/ 11 марта 2010

Вы занимались разработкой ASP.NET MVC, включая Spring.NET и NHibernate? Я хотел бы увидеть информативный пример такой настройки, чтобы я мог построить свой собственный проект на этом.

Я попробовал поискать в Google, нашел несколько интересных вещей, таких как S # arp Architecture, статья о обычном ASP.NET (WebForms), интегрированном с фреймворками и так далее. Тем не менее, мне не хватает хорошего учебника по ASP.NET MVC и тому подобному.

P.S .: Я знаю, как работают Spring и Hibernate, мне просто нужно подключить их в приложение MVC. Не хочу сейчас использовать S # arp Architecture.

P.P.S: Я обновлю ссылки позже, включая эту:

Ответы [ 4 ]

5 голосов
/ 21 марта 2010

Конфигурация NHibernate ничем не отличается от веб-формы Spring.Net. Добавьте модуль OpenSessionInView в web.config и определите фабрику сеансов с именем SessionFactory в конфигурации весны.

Интеграция Spring.Net и MVC осуществляется путем регистрации пользовательского IControllerFactory при запуске приложения, к которому применяется пользовательский ControllerActionInvoker. Фабрика контроллеров создает или настраивает контроллеры, а вызывающий действие настраивает любые ActionFilter.

public class MvcApplication: System.Web.HttpApplication
{
    public static void RegisterRoutes( RouteCollection routes )
    {
        //
    }

    protected void Application_Start()
    {
        RegisterRoutes( RouteTable.Routes );

        lock (this) {
            ControllerBuilder.Current.SetControllerFactory( new SpringControllerFactory() );
        }
    }
}

public class SpringControllerFactory: DefaultControllerFactory
{
    public SpringControllerFactory()
    {
        SpringContext = WebApplicationContext.Current;
    }
    protected override IController GetControllerInstance( Type controllerType )
    {
        IController controller = null;
        if (SpringContext.ContainsObject( controllerType.Name )) {
            controller = (IController) SpringContext.GetObject( controllerType.Name );
        }

        if (controller == null) {
            controller = base.GetControllerInstance( controllerType );
            SpringContext.ConfigureObject( controller, controllerType.FullName );
        }

        var standardController = controller as Controller;
        if (standardController != null) {
            standardController.ActionInvoker = new SpringActionInvoker();
        }

        return controller;
    }

    private IApplicationContext SpringContext
    { get; set; }
}

public class SpringActionInvoker: ControllerActionInvoker
{
    public SpringActionInvoker()
    {
        SpringContext = WebApplicationContext.Current;
    }
    protected override FilterInfo GetFilters( ControllerContext controllerContext, ActionDescriptor actionDescriptor )
    {
        var filterInfo = base.GetFilters( controllerContext, actionDescriptor );

        foreach (IActionFilter filter in filterInfo.ActionFilters.Where( f => f != null )) {
            SpringContext.ConfigureObject( filter, filter.GetType().FullName );
        }

        foreach (IAuthorizationFilter filter in filterInfo.AuthorizationFilters.Where( f => f != null )) {
            SpringContext.ConfigureObject( filter, filter.GetType().FullName );
        }

        foreach (IExceptionFilter filter in filterInfo.ExceptionFilters.Where( f => f != null )) {
            SpringContext.ConfigureObject( filter, filter.GetType().FullName );
        }

        foreach (IResultFilter filter in filterInfo.ResultFilters.Where( f => f != null )) {
            SpringContext.ConfigureObject( filter, filter.GetType().FullName );
        }

        return filterInfo;
    }

    private IApplicationContext SpringContext
    { get; set; }
}

Mvc Contrib имеет аналогичный SpringControllerFactory, хотя он не настраивает фильтры действий. Настраивается при запуске приложения:

    protected void Application_Start()
    {
        RegisterRoutes( RouteTable.Routes );

        lock (this) {
            ControllerBuilder.Current.SetControllerFactory( new SpringControllerFactory() );
            SpringControllerFactory.Configure( WebApplicationContext.Current );
        }
    }
1 голос
/ 19 июля 2011

Мне тоже было нелегко найти пример NHibernate, Spring.NET и ASP.NET MVC. Я нашел пример Spring.NET/NHibernate Northwind (использует шаблон WebForms), но не смог найти простой способ использования DAO NHibernate с моей моделью.

Наконец, я нашел этот и нашел его очень полезным.

1 голос
/ 19 марта 2010

Для nhibernate посмотрите веб-трансляции Стивена Болена Лето Nhibernate и Осень Agile .

Лично я не использовал Sprint.net, но эту заставку я нашел полезным, чтобы получить общий обзор. Фредрик Норман также имеет пост на asp.net MVC и spring.net .

0 голосов
/ 12 марта 2010

Мне наконец-то удалось снабдить мое приложение ASP.NET MVC средствами Spring.NET. Просто написал собственную фабрику контроллеров (достаточно упрощенную), а затем, учитывая глобальный контекст Spring (который я создаю вручную), я могу просто вытащить свои контроллеры и делать все, что я делал раньше.

Некоторые полезные ссылки, но не все: http://www.pnpguidance.net/Post/SetDefaultControllerFactoryIControllerFactoryASPNETMVCFramework.aspx

http://weblogs.asp.net/seanmcalinden/archive/2010/01/13/custom-ioc-container-for-dependency-injection-with-an-asp-net-mvc-website-usage-example.aspx

С тех пор интеграция с NHibernate должна быть довольно простой:)

P.S .: Проблема в том, что: a) MVCContrib, кажется, теперь отрицает необходимость в контейнерах IoC, потому что я слышал что-то об устаревании IoC / DI в ASP MVCContrib. Наверное, поэтому мне не удалось заставить их SpringControllerFactory работать (как обычно с WebSupportModule Spring's)

b) Есть некоторые статьи, рассматривающие необходимую интеграцию, но все они кажутся ... необработанными в некотором смысле (может быть, потому что многие из них просто предоставляют решения, которые не работают?:))

...