2012-08-31 29 views
10

के साथ मैं एक एएसपी.नेट एमवीसी 3 प्रोजेक्ट को एमवीसी 4 में परिवर्तित कर रहा हूं। मैं स्ट्रक्चर मैप और एमवीसी 4 के साथ काम करने के लिए सबसे अच्छा तरीका खोजने की कोशिश कर रहा था। मुझे कुछ समाधान मिल गए हैं जो काम कर सकते हैं, लेकिन अभी तक कोशिश नहीं की है।एएसपीनेट एमवीसी 4 स्ट्रक्चर मैप

पहला समाधान बहुत सरल है और lightweight है। दूसरा एक (Structuremap.MVC4) स्टार्टअप के लिए वेब एक्टिवेटर पर निर्भर करता है।

बेहतर और सरल दृष्टिकोण क्या है? क्या मुझे अभी भी सब कुछ बूटस्ट्रैप करने की आवश्यकता है और वेबएक्टिवेटर के साथ निर्भरता रीसोलवर सेट करना है?

आपकी मदद के लिए धन्यवाद।

उत्तर

14

मैंने निम्नलिखित किया और यह काम करता है। आशा करता हूँ की ये काम करेगा।

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

अपने help.I'll के लिए धन्यवाद अपने कोड कोशिश करते हैं और मैं आपसे कुछ प्रतिक्रिया के साथ मिल जाएगा। – LeftyX

+1

वह अनुभाग जहां आप सेवाओं का संग्रह वापस करते हैं, को _container.GetAllInstances (serviceType) में बदला जाना चाहिए .स्ट () –