2010-03-11 14 views
7

¿Ha estado haciendo algo de desarrollo ASP.NET MVC con Spring.NET y NHibernate ambos? Me gustaría ver un ejemplo informativo de dicha configuración, por lo que podría construir mi propio proyecto con eso.ASP.NET MVC, Spring.NET, NHibernate configuración inicial/ejemplo/tutorial

Probé con Google, encontré algunas cosas bonitas como S # arp Architecture, un artículo sobre ASP.NET (WebForms) regular integrado con los marcos, etc. Aún así, me falta un buen tutorial sobre ASP.NET MVC & el subj.

P.S .: Sé cómo funcionan Spring and Hibernate, solo necesito conectarlos a una aplicación MVC. No quiero usar arquitectura S # arp por ahora.

P.P.S: Voy a actualizar los enlaces más tarde, incluido éste:

+0

Por cierto, me pregunto si la arquitectura S # arp usando otra DI por defecto podría cambiarse para usar Spring.NET :) – Bubba88

+0

Por qué no, el contenedor IoC no es una parte importante de S # arp. Utiliza ServiceLocator en muchos lugares, por lo que solo necesita cambiar el registro de los componentes. – queen3

Respuesta

0

fin he logrado dar mi aplicación ASP.NET MVC con instalaciones Spring.NET. Acabo de escribir una fábrica de controladores personalizada (lo suficientemente simplista), luego, dado un contexto global de Spring (que creo manualmente), puedo sacar mis controladores y hacer lo que hice antes.

Algunos enlaces útiles, pero no todos: 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

Desde entonces, la integración con NHibernate debe ser bastante sencillo :)

PD: El problema es: a) MVCContrib parece negar la necesidad de contenedores de IoC ahora, porque he escuchado algo sobre la desactivación de IoC/DI en ASP MVCContrib. Supongo que es por eso que no pude lograr que su SpringControllerFactory funcione (como de costumbre con WebSupportModule de Spring)

b) Hay algunos artículos, considerando la integración requerida, pero todos parecen estar ... crudos en algunos sentido (tal vez porque muchos simplemente ofrecen soluciones que no funcionan? :))

5

La configuración de NHibernate no es diferente de una aplicación de formularios web Spring.Net. Agregue el módulo OpenSessionInView al web.config y defina una fábrica de sesiones llamada SessionFactory en la configuración del resorte.

La integración de Spring.Net y MVC se realiza mediante el registro de un IControllerFactory personalizado en el inicio de la aplicación, esto aplica un ControllerActionInvoker personalizado. La fábrica del controlador crea o configura los controladores y la acción invocador configura cualquier 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 tiene una SpringControllerFactory similar, aunque no configura filtros de acción. Se configura en el inicio de la aplicación:

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

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

yo también estaba teniendo un tiempo difícil encontrar un ejemplo NHibernate, Spring.NET y ASP.NET MVC. Encontré el ejemplo de Spring.NET/NHibernate Northwind (usa el patrón WebForms), pero no pude encontrar una manera simple de usar NHibernate DAO con mi modelo.

Finalmente, encontré this one y encontré que es muy útil.

+0

Puede verificar la url. no funciona . –

Cuestiones relacionadas