इस पोस्ट प्रबंधित तानाना फ्रेमवर्क पूर्वावलोकन को संदर्भित करता है 2.
तो, मैं एमईएफ के माध्यम से भाग लिया था और एक त्वरित "हैलो वर्ल्ड" लिखा था, जो नीचे प्रस्तुत किया गया है। मुझे कहना होगा कि गोता लगाने और समझने में पूरी तरह से आसान था। कैटलॉग सिस्टम बहुत बढ़िया है और एमईएफ को खुद को बहुत सीधे आगे बढ़ाता है। यह एडिन असेंबली की निर्देशिका में इंगित करने के लिए तुच्छ है और इसे बाकी को संभालने दें। एमईएफ की विरासत अला प्रिज्म निश्चित रूप से दिखाता है, लेकिन मुझे लगता है कि अगर यह नहीं किया गया तो यह अजीब होगा, क्योंकि दोनों ढांचे रचना के बारे में हैं।
मुझे लगता है कि मेरी क्रॉ में चिपकने वाली चीज़ सबसे अधिक _container का "जादू" है।()। यदि आप हैलोमेफ कक्षा में देखते हैं, तो आप देखेंगे कि अभिवादन क्षेत्र किसी भी कोड द्वारा प्रारंभ नहीं किया गया है, जो कि मजाकिया लगता है। मुझे लगता है कि मैं आईओसी कंटेनर के काम को पसंद करता हूं, जहां आप स्पष्ट रूप से कंटेनर को आपके लिए ऑब्जेक्ट बनाने के लिए कहते हैं। मुझे आश्चर्य है कि कुछ प्रकार के "कुछ भी नहीं" या "खाली" सामान्य प्रारंभिक क्रम में हो सकता है। अर्थात
private IGreetings greetings = CompositionServices.Empty<IGreetings>();
कम से कम "कुछ" ऐसे समय जब तक साथ वस्तु भरता है कि के रूप में कंटेनर रचना कोड एक असली "कुछ" के साथ भरने के लिए चलाता है। मुझे नहीं पता - यह विज़ुअल बेसिक के खाली या कुछ भी कीवर्ड की थोड़ी सी चीज़ों को स्मैक नहीं करता है, जिसे मैं हमेशा नापसंद करता हूं। अगर किसी और के पास इस पर कुछ विचार हैं, तो मैं उन्हें सुनना चाहता हूं। शायद यह कुछ है जो मुझे खत्म करने की जरूरत है। यह एक बड़ी वसा [आयात] विशेषता के साथ चिह्नित है, इसलिए ऐसा नहीं है कि यह एक पूर्ण रहस्य या कुछ भी है।
ऑब्जेक्ट जीवनकाल को नियंत्रित करना स्पष्ट नहीं है, लेकिन जब तक आप निर्यातित वर्ग में [compositionOptions] विशेषता जोड़ते हैं, तब तक सबकुछ एक सिंगलटन डिफ़ॉल्ट रूप से नहीं होता है। चलिए आप या तो फैक्टरी या सिंगलटन निर्दिष्ट करते हैं। किसी भी समय इस सूची में पूल किए गए पूल को देखना अच्छा लगेगा।
मैं वास्तव में स्पष्ट नहीं हूं कि बतख टाइपिंग सुविधाओं कैसे काम करती है। यह बतख टाइपिंग के बजाय ऑब्जेक्ट सृजन पर मेटा-डेटा इंजेक्शन की तरह लगता है। और ऐसा लगता है कि आप केवल एक अतिरिक्त बतख में जोड़ सकते हैं। लेकिन जैसे मैंने कहा, मैं वास्तव में स्पष्ट नहीं हूं कि ये सुविधा अभी तक कैसे काम करती है। उम्मीद है कि मैं वापस आ सकता हूं और बाद में इसे भर सकता हूं।
मुझे लगता है कि डायरेक्टपार्टसूची द्वारा लोड किए गए डीएलएल की प्रतिलिपि बनाना छाया का एक अच्छा विचार होगा। एक बार एमईएफ को पकड़ने के बाद डीएलएल बंद कर दिए जाते हैं। यह आपको एक निर्देशिका वॉचर जोड़ने और अद्यतन एडिन को पकड़ने की अनुमति देगा। यह बहुत प्यारा होगा ...
अंत में, मुझे चिंता है कि एडिन डीएलएल कितने भरोसेमंद हैं और कैसे, या यदि एमईएफ आंशिक विश्वास वातावरण में व्यवहार करेगा।मुझे संदेह है कि एमईएफ का उपयोग करने वाले अनुप्रयोगों को पूर्ण विश्वास की आवश्यकता होगी। एडिन को अपने ऐपडोमेन में लोड करना भी समझदार हो सकता है। मुझे पता है कि यह थोड़ा सा सिस्टम smacks। AddIn, लेकिन यह उपयोगकर्ता addins और सिस्टम addins के बीच बहुत स्पष्ट अलगाव की अनुमति होगी।
ठीक है - पर्याप्त ब्लैदरिंग। एमईएफ और सी # में हैलो वर्ल्ड यहाँ है। का आनंद लें!
using System;
using System.ComponentModel.Composition;
using System.Reflection;
namespace HelloMEF
{
public interface IGreetings
{
void Hello();
}
[Export(typeof(IGreetings))]
public class Greetings : IGreetings
{
public void Hello()
{
Console.WriteLine("Hello world!");
}
}
class HelloMEF : IDisposable
{
private readonly CompositionContainer _container;
[Import(typeof(IGreetings))]
private IGreetings greetings = null;
public HelloMEF()
{
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly()));
_container = new CompositionContainer(catalog);
var batch = new CompositionBatch();
batch.AddPart(this);
container.Compose(batch);
}
public void Run()
{
greetings.Hello();
}
public void Dispose()
{
_container.Dispose();
}
static void Main()
{
using (var helloMef = new HelloMEF())
helloMef.Run();
}
}
}
मैं हाल ही में MEF पूर्वावलोकन 4 के साथ खेला है, और वे कुछ हद तक कोड साफ कर लिया है। AggregatingComposablePartCatalog अब सिर्फ कुल सूची है, इत्यादि। आईएमएचओ की एक बड़ी जीत के आसपास –