ASP.NET MVC,Spring.NET,NHibernate初始设置/示例/教程

Bub*_*a88 7 .net nhibernate asp.net-mvc spring.net

您是否正在进行涉及Spring.NET和NHibernate的ASP.NET MVC开发?我想看一个这样设置的信息性例子,所以我可以建立我自己的项目.

我尝试使用谷歌搜索,发现了一些漂亮的东西,如S#arp Architecture,一篇关于与框架集成的常规ASP.NET(WebForms)的文章等等.不过,我错过了一个关于ASP.NET MVC和subj的好教程.

PS:我知道Spring和Hibernate是如何工作的,我只需要将它们插入到MVC应用程序中.现在不想使用S#arp架构.

PPS:我稍后会更新链接,包括以下链接:

Lac*_*che 5

NHibernate配置与Spring.Net webforms应用程序没有什么不同.将OpenSessionInView模块添加到web.config并定义SessionFactoryspring config中命名的会话工厂.

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; }
}
Run Code Online (Sandbox Code Playgroud)

Mvc Contrib有一个类似的SpringControllerFactory,虽然它没有配置动作过滤器.它在应用程序启动时配置:

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

        lock (this) {
            ControllerBuilder.Current.SetControllerFactory( new SpringControllerFactory() );
            SpringControllerFactory.Configure( WebApplicationContext.Current );
        }
    }
Run Code Online (Sandbox Code Playgroud)


Bub*_*a88 0

我终于成功地为我的 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 容器,因为我听说过有关 ASP MVCContrib 中 IoC/DI 弃用的信息。我想,这就是为什么我无法得到他们的SpringControllerFactory工作(就像WebSupportModuleSpring 的往常一样)

b)有一些文章考虑了所需的集成,但从某种意义上说它们似乎都是原始的(也许是因为许多文章只提供了不起作用的解决方案?:))