gpt4 book ai didi

.net - ASP.NET MVC、Spring.NET、NHibernate 初始设置/示例/教程

转载 作者:行者123 更新时间:2023-12-04 12:01:28 30 4
gpt4 key购买 nike

你做过一些涉及 Spring.NET 和 NHibernate 的 ASP.NET MVC 开发吗?我想看看这种设置的信息示例,所以我可以建立我自己的项目。

我尝试了谷歌搜索,发现了一些漂亮的东西,比如 S#arp Architecture,一篇关于与框架集成的常规 ASP.NET (WebForms) 的文章等等。尽管如此,我还是缺少一个关于 ASP.NET MVC 和主题的好教程。

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

P.P.S:稍后我会更新链接,包括这个:

最佳答案

NHibernate 配置与 Spring.Net webforms 应用程序没有什么不同。添加 OpenSessionInView模块到 web.config并定义一个名为 SessionFactory 的 session 工厂在 Spring 配置中。

Spring.Net 和 MVC 的集成是通过注册一个自定义的 IControllerFactory 来完成的。在应用程序启动中,这将应用自定义 ControllerActionInvoker . Controller 工厂创建或配置 Controller ,操作调用程序配置任何 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,虽然它没有配置 Action 过滤器。它在应用程序启动时配置:
    protected void Application_Start()
{
RegisterRoutes( RouteTable.Routes );

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

关于.net - ASP.NET MVC、Spring.NET、NHibernate 初始设置/示例/教程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2426023/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com