2010-03-11 3 views
7

Spring.NET과 NHibernate를 모두 포함하는 ASP.NET MVC 개발을 해왔습니까? 그러한 설정에 대한 유익한 예를보고 싶습니다. 그래서 제가 직접 프로젝트를 만들 수 있습니다.ASP.NET MVC, Spring.NET, NHibernate 초기 설정/예제/튜토리얼

인터넷 검색을 시도하고 S # arp Architecture, 프레임 워크와 통합 된 일반 ASP.NET (WebForms)에 대한 기사 등을 발견했습니다. 여전히, ASP.NET MVC &에 대한 좋은 자습서가 없습니다.

P .: Spring과 Hibernate의 작동 방식을 알고 있으며, MVC 애플리케이션에 연결하기 만하면됩니다. S # arp Architecture를 지금 사용하고 싶지는 않습니다.

P.P.S :이 일을 포함하여, 나중에 링크를 업데이트합니다 : 마침내 Spring.NET 시설 내 ASP.NET MVC 응용 프로그램을 제공하기 위해 관리했습니다

+0

BTW, 기본적으로 다른 DI를 사용하는 S # arp 아키텍처가 Spring.NET을 사용하도록 변경할 수 있는지 궁금합니다. – Bubba88

+0

IoC 컨테이너가 S # arp의 주요 부분이 아닌 이유는 무엇입니까? ServiceLocator는 여러 위치에서 사용되므로 구성 요소 등록 만 변경하면됩니다. – queen3

답변

0

. 그냥 커스텀 contoller 팩토리를 작성했다. (필자가 수동으로 생성 한) 전역 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 비추천에 대해 들었습니다. 내가 필요한 통합을 고려, 일부 기사가 있습니다

B) (봄의의 WebSupportModule와 함께 평소처럼) 자신의 SpringControllerFactory 작업을 얻을 관리 할 수있는 그 이유는, 추측, 그러나 그들 모두는 약간의 .. 날 것 같다 (아마도 많은 사람들이 단지 작동하지 않는 솔루션을 제공하기 때문일 수도 있습니다 :)

5

NHibernate 설정은 Spring.Net 웹 폼 앱과 다를 바 없습니다. OpenSessionInView 모듈을 web.config에 추가하고 spring config에 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

내가 너무 NHibernate에, Spring.NET 및 ASP.NET MVC 예를 찾는 힘든 시간을 보내고 있었다. Spring.NET/NHibernate Northwind 예제 (WebForms 패턴 사용)를 찾았지만 내 모델과 함께 NHibernate DAO를 사용하는 간단한 방법을 찾을 수 없습니다.

마지막으로 this one이 발견되어 매우 도움이되는 것으로 나타났습니다.

+0

URL을 확인해 주시겠습니까? 작동하지 않습니다. –

관련 문제