2010-04-29 13 views
6

मैं कोड में कहीं किसी उदाहरण को हल करने का तरीका जानने का प्रयास कर रहा हूं।उदाहरण हल करें - ऑटोफैक

आवेदन स्टार्टअप पर मैं एक प्रकार

static void Main() 
{  
    var builder = new ContainerBuilder(); 
    builder.RegisterType<Foo>().As<IFoo>(); 
} 

अब पंजीकृत, मैं कैसे कोड में कहीं एक उदाहरण को हल कर सकते हैं?

StructureMAP में एक स्थिर वस्तु ObjectFactory.GetInstance<IFoo>()

उत्तर

10

Getting Started के बारे में पढ़ें है। यह आपको शुरू करना चाहिए।

सबसे पहले, आप जो खोज रहे हैं वह container है। ContainerBuilder इस सरल WinForms अनुप्रयोग में की तरह से यह बिल्ड:

static void Main() 
{ 
    using (var container = builder.Build()) 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     var mainForm = container.Resolve<MainForm>(); 
     Application.Run(mainForm) 
    } 
} 

सामान्य विचार यह है कि आप केवल पहले या सर्वोच्च उदाहरण को हल करने के लिए है। कंटेनर कन्स्ट्रक्टर पैरामीटर के माध्यम से निर्भरता इंजेक्शन के आधार पर अन्य सभी उदाहरणों को बनाने में संभाल करेगा।

यदि आपके आवेदन के दौरान DI पैटर्न का पालन किया जाता है तो आपको स्टार्टअप पर केवल एक बार कंटेनर को छूना होगा।

आप शीर्षतम उदाहरण को कैसे हल करते हैं, इस बात पर निर्भर करता है कि आप किस प्रकार के एप्लिकेशन का निर्माण कर रहे हैं। यदि यह एक वेब ऐप है, तो ASP.Net integration और MVC integration आपके लिए इसका ख्याल रखेगा। (आखिरकार, एएसपी.Net में सबसे ऊपर का उदाहरण Application है जो हमारे नियंत्रण से बाहर है)।

दूसरी ओर, अगर इसकी एक कंसोल एप्लिकेशन या WinForms आप Main में मैन्युअल रूप से पहला उदाहरण हल होगा अनुप्रयोग, ऊपर मेरी नमूना की तरह।

+0

यह उदाहरण है, लेकिन अगर मुझे अधिक कक्षाओं में एक उदाहरण की आवश्यकता है तो क्या होगा? प्रत्येक वर्ग में प्रकार पंजीकृत नहीं कर सकते हैं। – user137348

+1

लेकिन आपको किसी भी तरह कोड में कहीं भी इस शीर्षतम उदाहरण को हल करना होगा। प्रकार स्टार्टअप (ग्लोबल.एक्सएक्स) पर पंजीकृत होते हैं और फिर आपको कोड में कहीं भी शीर्षतम उदाहरण को हल करने की आवश्यकता होती है। अंत में, मुझे यह लेख लिखने वाला एक लेख मिला। http://geekswithblogs.net/Sharpoverride/archive/2009/08/15/ioc-in-.net-part-1-autofac.aspx इस दृष्टिकोण के बारे में आप क्या सोचते हैं? – user137348

+0

मेरा अद्यतन उत्तर देखें ... और हाँ, @Sharpoverrides दृष्टिकोण ठीक है, यह सुनिश्चित करता है कि ग्लोबल.एक्सएक्स कंटेनर-बिल्डिंग कोड के साथ अव्यवस्थित नहीं है। आखिरकार, आपको वास्तव में उन अनजानों को लिखना चाहिए जो कंटेनर का परीक्षण करते हैं, और कंटेनर बनाने वाली एकल-जिम्मेदारी कक्षा होने से परीक्षण करना आसान हो जाता है। –

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