ASP.NET MVC, Spring.NET, начальная настройка NHibernate/example/tutorial

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

Я пытался гуглить, нашел некоторые симпатичные вещи как Архитектура S#arp, изделие об обычном ASP.NET (Веб-формы) интегрированный с платформами и так далее. Однако, я пропускаю хорошее учебное руководство на ASP.NET MVC и тема.

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

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

7
задан Bubba88 11 March 2010 в 15:05
поделиться

3 ответа

Наконец-то мне удалось снабдить мое приложение 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 должна быть довольно простой: )

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

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

0
ответ дан 7 December 2019 в 07:43
поделиться

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

Интеграция 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 );
        }
    }
5
ответ дан 7 December 2019 в 07:43
поделиться

Для nhibernate посмотрите вебкасты Стивена Болена Summer of Nhibernate и Autumn of Agile.

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

1
ответ дан 7 December 2019 в 07:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: