2010-03-11 38 views
7

您是否在做一些涉及Spring.NET和NHibernate的ASP.NET MVC开发?我希望看到这样的设置的一个信息丰富的例子,所以我可以建立自己的项目。ASP.NET MVC,Spring.NET,NHibernate初始设置/示例/教程

我试过Google,发现了一些漂亮的东西,如S#arp Architecture,一篇关于与框架集成的常规ASP.NET(WebForms)的文章等等。不过,我错过了关于ASP.NET MVC &这个主题的很好的教程。

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

P.P.S:我会在以后更新的链接,包括这一个:

+0

顺便说一句,我不知道是否S#arp架构默认使用其他DI可以更改为使用Spring.NET :) – Bubba88 2010-03-11 15:13:10

+0

为什么不,IoC容器不是S#arp的主要部分。它在许多地方使用ServiceLocator,因此您只需更改组件注册。 – queen3 2010-03-11 17:12:54

回答

0

我终于成功地提供我与Spring.NET设施ASP.NET MVC应用程序。刚刚写了一个自定义的控制器工厂(简单的),然后,给定一个全局的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:这个问题是:1)MVCContrib似乎现在拒绝了对IoC容器的需求,因为我听说过有关ASP MVCContrib中IoC/DI弃用的一些信息。我想,这就是为什么我不能设法得到他们的SpringControllerFactory工作(像往常一样与春季的WebSupportModule

b)有一些文章,考虑到所需的整合,但他们似乎都.. ..在一些原始的感觉(也许是因为许多只是提供的解决方案,不工作?:))

5

NHibernate配置与Spring.Net webforms应用程序没有什么不同。将OpenSessionInView模块添加到web.config,并在spring配置中定义一个名为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

我也很难找到一个NHibernate,Spring.NET和ASP.NET MVC示例。我发现Spring.NET/NHibernate Northwind示例(使用WebForms模式),但找不到使用NHibernate DAO与我的模型的简单方法。

最后,我发现this one,发现它非常有帮助。

+0

你可以请检查网址。它不工作。 – 2014-10-15 09:10:56