2012-08-31 23 views
10

Estoy convirtiendo un proyecto ASP.NET MVC3 a MVC4. Estaba tratando de encontrar el mejor enfoque para trabajar con StructureMap y MVC4. He encontrado un par de soluciones que podrían funcionar, pero aún no las he probado.asp.net MVC 4 con StructureMap

La primera solución es muy simple y lightweight. El segundo (Structuremap.MVC4) depende de WebActivator para el inicio.

¿Cuál es el enfoque mejor y más simple? ¿Debo seguir arrancando todo y configurar DependencyResolver con WebActivator?

Gracias por su ayuda.

Respuesta

14

Hice lo siguiente y funciona. Espero eso ayude.

public class StructureMapDependencyResolver : IDependencyResolver 
    { 
     private readonly IContainer _container; 

     public StructureMapDependencyResolver(IContainer container) 
     { 
      _container = container; 
     } 

     public object GetService(Type serviceType) 
     { 
      if (serviceType.IsAbstract || serviceType.IsInterface) 
      { 

       return _container.TryGetInstance(serviceType); 

      } 

      return _container.GetInstance(serviceType); 
     } 

     public IEnumerable<object> GetServices(Type serviceType) 
     { 
      return _container.GetAllInstances<object>().Where(s => s.GetType() == serviceType); 
     } 

    } 

Global.asax:

 protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     var container = ConfigureDependencies(); 

     GlobalConfiguration.Configuration.ServiceResolver.SetResolver(new StructureMapDependencyResolver(container)); 

     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
    } 

    public static IContainer ConfigureDependencies() 
    { 
     IContainer container = new Container(); 

     Database.SetInitializer(new DataContextInitializer()); 
     var dataContext = new DataContext.DataContext(); 

     container.Configure(x => x.For<IRepository>().Use<Repository>().Ctor<DbContext>().Is(dataContext)); 
     container.Configure(x=>x.For<IUnitOfWork>().Use<UnitOfWork>()); 

     return container; 
    } 
+0

Gracias por su help.I'll probar su código y lo pondremos en contacto con usted con algunos comentarios. – LeftyX

+1

La sección donde devuelve una colección de servicios debe cambiarse a _container.GetAllInstances (serviceType) .Cast () –

Cuestiones relacionadas