你是否一直在做一些涉及Spring.NET和NHibernate的ASP.NET MVC开发?我想看一个这样设置的信息性示例,所以我可以建立我自己的项目。
我尝试使用谷歌搜索,发现了一些漂亮的东西,如S#arp Architecture,一篇关于与框架集成的常规ASP.NET(WebForms)的文章等等。不过,我错过了关于ASP.NET MVC& amp;的一个很好的教程。主题
P.S。:我知道Spring和Hibernate是如何工作的,我只需要将它们插入到MVC应用程序中。现在不想使用S#arp架构。
P.P.S:我稍后会更新这些链接,包括这个链接:
答案 0 :(得分:5)
NHibernate配置与Spring.Net webforms应用程序没有什么不同。将OpenSessionInView
模块添加到web.config
并在spring配置中定义名为SessionFactory
的会话工厂。
通过在应用程序启动中注册自定义IControllerFactory
来完成Spring.Net和MVC集成,这将应用自定义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 :(得分:1)
对于nhibernate,请查看Stephen Bohlen的网络广播Summer of Nhibernate和Autumn of Agile。
就我个人而言,我还没有使用过Sprint.net,但我发现screencast对于获得一般性概述非常有用。弗雷德里克诺曼也有asp.net MVC and spring.net的帖子。
答案 2 :(得分:1)
我也很难找到NHibernate,Spring.NET和ASP.NET MVC示例。我找到了Spring.NET/NHibernate Northwind示例(使用WebForms模式),但找不到一种简单的方法来将NHibernate DAO用于我的模型。
最后,我发现this one并发现它非常有帮助。
答案 3 :(得分:0)
我终于设法为我的ASP.NET MVC应用程序提供Spring.NET工具。刚写了一个自定义控制器工厂(简单化),然后,给定一个全局Spring上下文(我手动创建),我可以拔出我的控制器并做我以前做的任何事情。
一些有用的链接,但不是全部: http://www.pnpguidance.net/Post/SetDefaultControllerFactoryIControllerFactoryASPNETMVCFramework.aspx
从那时起,与NHibernate的集成必须非常简单:)
P.S。:问题是:a)MVCContrib现在似乎否认需要IoC容器,因为我听说过ASP MVCContrib中有关IoC / DI弃用的内容。我想,这就是为什么我无法让他们的SpringControllerFactory
工作(像往常一样的WebSupportModule
的春天)