2012-03-13 11 views
5

मैं ऐपडोमेन और एक्टिवेटर के बीच के अंतर को समझने के लिए एक प्रश्न पूछना चाहता हूं, मैंने एपडोमेन के माध्यम से अपना डीएल लोड किया। क्रिएट इंस्टेंस। लेकिन मुझे एहसास हुआ कि उदाहरण बनाने के लिए और अधिक विधि। इसलिए मैं इस विधि को कब या कहां चुनूं? example1:AppDomain.CreateInstance और Activator.CreateInstance के बीच क्या अंतर है?

// Use the file name to load the assembly into the current 
    // application domain. 
    Assembly a = Assembly.Load("example"); 
    // Get the type to use. 
    Type myType = a.GetType("Example"); 
    // Get the method to call. 
    MethodInfo myMethod = myType.GetMethod("MethodA"); 
    // Create an instance. 
    object obj = Activator.CreateInstance(myType); 
    // Execute the method. 
    myMethod.Invoke(obj, null); 

Example2:

public WsdlClassParser CreateWsdlClassParser() 
{ 
    this.CreateAppDomain(null); 

    string AssemblyPath = Assembly.GetExecutingAssembly().Location; 
    WsdlClassParser parser = null; 
    try 
    {     
     parser = (WsdlClassParser) this.LocalAppDomain.CreateInstanceFrom(AssemblyPath, 
              typeof(Westwind.WebServices.WsdlClassParser).FullName).Unwrap() ;     
    } 
    catch (Exception ex) 
    { 
     this.ErrorMessage = ex.Message; 
    }       
    return parser; 
} 

Example3:

private static void InstantiateMyTypeSucceed(AppDomain domain) 
{ 
    try 
    { 
     string asmname = Assembly.GetCallingAssembly().FullName; 
     domain.CreateInstance(asmname, "MyType"); 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine(); 
     Console.WriteLine(e.Message); 
    } 
} 

आप व्याख्या कर सकते हैं कारण है कि मैं और अधिक तरीकों की आवश्यकता है या मतभेद क्या हैं?

उत्तर

2

sscli2.0 स्रोत कोड से, ऐसा लगता है कि AppDomain कक्षा में "CreateInstance" विधि कॉल हमेशा कॉल को Activator पर भेजती है।

(लगभग स्थिर) के एकमात्र उद्देश्य के उत्प्रेरक वर्ग "बनाएँ" के लिए विभिन्न वर्गों के उदाहरण है, जबकि AppDomain काफी अलग (और शायद अधिक महत्वाकांक्षी) प्रयोजनों के लिए, उदाहरण के लिए शुरू की है:

  1. आवेदन अलगाव की एक हल्के वजन इकाई;
  2. मेमोरी खपत को अनुकूलित करें क्योंकि ऐपडोमेन को अनलोड किया जा सकता है।
  3. ...

1 और 3 उदाहरण सीधा कर रहे हैं, बस के रूप में zmbq का उल्लेख किया। मुझे लगता है कि आपका दूसरा उदाहरण इस post से है, जहां लेखक ने दिखाया कि ऐपडोमेन का उपयोग करके पुरानी प्रॉक्सी को कैसे उतारना है।

2

पहला व्यक्ति असेंबली 'उदाहरण' से Example का उदाहरण बनाता है, और MethodA पर कॉल करता है।

तीसरा एक अलग AppDomain

में MyType का एक उदाहरण बनाता है मैं दूसरे के बारे में निश्चित नहीं हूँ, मैं नहीं जानता कि क्या this है, लेकिन यह वर्तमान में एक वर्ग बनाने के लिए लगता है ऐप-डोमेन - यानी, यह पहले जैसा ही है।

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