2012-09-08 11 views
5

ऐपहोस्ट क्लास में सभी विधि ओवरराइड फ़ंक कंटेनर का उपयोग करती हैं। मैं अपने एएसपी.नेट एमवीसी ऐप के भीतर ऑटोफैक का उपयोग करता हूं (मैं अपने एमवीसी ऐप के साथ एसएस साइड-साइड चलाता हूं)।सर्विसस्टैक फ़ंक आईओसी प्रतिस्थापन

  1. क्या global.asax.cs से ऑटोफैक पंजीकरण का उपयोग करने का कोई तरीका है या यह प्रतिस्थापित करने के लिए एक ओवरकिल है?
  2. मैं AppHost में इस लाइन पर टिप्पणी की

    //ControllerBuilder.Current.SetControllerFactory(new FunqControllerFactory (कंटेनर));

क्योंकि यह मेरे ऑटोफैक संचालित नियंत्रकों के साथ गड़बड़ कर रहा था। क्या ऑटोफैक और फंक को मेरे ऐप में समस्याएं रोकने के लिए पर्याप्त है? या फ़ंक स्वयं को डिफ़ॉल्ट रूप से DependencyResolver के रूप में सेट करता है?

+0

FunqControllerFactory की impl यहाँ मदद कर सकता है: https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.FluentValidation.Mvc3/Mvc यहाँ एक वैकल्पिक IContainerAdapter करता है के लिए देखें /FunqControllerFactory.cs इसका उपयोग सोशलबूटस्ट्रैपएपी में यहां किया जाता है: https://github.com/ServiceStack/SocialBootstrapApi/blob/master/src/SocialBootstrapApi/App_Start/AppHost.cs#L131 FunqControllerFactory की तुलना में एमवीसी + फंक के साथ कोई अन्य आईओसी एकीकरण नहीं है – mythz

उत्तर

9

फ़नक और ऑटोफ़ैक एक साथ काम कर सकते हैं। सर्विसस्टैक के साथ आप एक ऑटोफैक एडाप्टर का उपयोग करने के लिए func को निर्देश देते हैं। यह पृष्ठ आपको विभिन्न आईओसी कंटेनर का उपयोग करने का तरीका बताता है। यह AutofacIocAdapter कक्षा के लिए भी कोड प्रदान करता है। https://github.com/ServiceStack/ServiceStack/wiki/The-IoC-container

public class AutofacIocAdapter : IContainerAdapter 
{ 
    private readonly IContainer _container; 

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

    public T Resolve<T>() 
    { 
     return _container.Resolve<T>(); 
    } 

    public T TryResolve<T>() 
    { 
     T result; 

     if (_container.TryResolve<T>(out result)) 
     { 
      return result; 
     } 

     return default(T); 
    } 
} 

तो विधि AppHost कॉन्फ़िगर (कंटेनर कंटेनर) में आप इस अनुकूलक सक्षम करना होगा:

//Create Autofac builder 
var builder = new ContainerBuilder(); 
//Now register all depedencies to your custom IoC container 
//... 

//Register Autofac IoC container adapter, so ServiceStack can use it 
IContainerAdapter adapter = new AutofacIocAdapter(builder.Build()) 
container.Adapter = adapter; 
4

स्वीकार किए जाते हैं जवाब जो व्यापक रूप से इस्तेमाल कर रहे हैं autofac प्रति अनुरोध बच्चे कंटेनर, संभाल नहीं करता है।

https://stackoverflow.com/a/15436254/7450

संबंधित मुद्दे