आम तौर पर, मैं आईओसी कंटेनर से पूरी तरह से अनजान एप्लिकेशन रखना चाहता हूं। हालांकि मैं उन समस्याओं में भाग गया हूं जहां मुझे इसे एक्सेस करने की आवश्यकता थी। दर्द को दूर करने के लिए मैं एक मूल सिंगलटन का उपयोग करता हूं। पहाड़ियों के लिए दौड़ने या शॉटगन को खींचने से पहले, मुझे अपने समाधान पर जाने दो। असल में, आईओसी सिंगलटन पूरी तरह से कुछ नहीं करता है, यह केवल एक आंतरिक इंटरफ़ेस को प्रस्तुत करता है जिसे पारित किया जाना चाहिए। मुझे पता चला है कि यह सिंगलटन के साथ कम दर्दनाक काम कर रहा है।एक सिंगलटन के पीछे आईओसी कंटेनर सार - यह गलत कर रहा है?
नीचे आईओसी आवरण है:
public static class IoC
{
private static IDependencyResolver inner;
public static void InitWith(IDependencyResolver container)
{
inner = container;
}
/// <exception cref="InvalidOperationException">Container has not been initialized. Please supply an instance if IWindsorContainer.</exception>
public static T Resolve<T>()
{
if (inner == null)
throw new InvalidOperationException("Container has not been initialized. Please supply an instance if IWindsorContainer.");
return inner.Resolve<T>();
}
public static T[] ResolveAll<T>()
{
return inner.ResolveAll<T>();
}
}
IDependencyResolver:
public interface IDependencyResolver
{
T Resolve<T>();
T[] ResolveAll<T>();
}
मैं बड़ी सफलता तो कई बार मैं इसे का उपयोग किया है के साथ अब तक (शायद एक बार हर कुछ परियोजनाओं किया है, मैं वास्तव में इसका उपयोग नहीं करना पसंद करता हूं) क्योंकि मैं कुछ भी इंजेक्ट कर सकता हूं: कैसल, एक स्टब, नकली इत्यादि।
क्या यह एक फिसलन सड़क है? क्या मैं सड़क के नीचे संभावित मुद्दों में भागने जा रहा हूं?