चलो पहले मान आप इस तरह एक IProfileRepository कुछ है कि:
public interface IProfileRepository
{
Profile GetProfile(string profileName);
}
साथ ही दो कार्यान्वयन: DatabaseProfileRepository
और XmlProfileRepository
। मुद्दा यह है कि आप प्रोफाइल टाइप के मूल्य के आधार पर सही एक चुनना चाहते हैं।
आप इस सार फैक्टरी शुरू करने से यह कर सकते हैं:
public Profile GetProfileInfo(string profileType, string profileName)
{
return this.factory.Create(profileType).GetProfile(profileName);
}
:
public interface IProfileRepositoryFactory
{
IProfileRepository Create(string profileType);
}
यह मानते हुए कि IProfileRepositoryFactory सेवा कार्यान्वयन में इंजेक्ट कर दिया गया है, अब आप इस तरह GetProfileInfo विधि लागू कर सकते हैं
IProfileRepositoryFactory का एक ठोस कार्यान्वयन इस तरह दिख सकता है:
public class ProfileRepositoryFactory : IProfileRepositoryFactory
{
private readonly IProfileRepository aRepository;
private readonly IProfileRepository bRepository;
public ProfileRepositoryFactory(IProfileRepository aRepository,
IProfileRepository bRepository)
{
if(aRepository == null)
{
throw new ArgumentNullException("aRepository");
}
if(bRepository == null)
{
throw new ArgumentNullException("bRepository");
}
this.aRepository = aRepository;
this.bRepository = bRepository;
}
public IProfileRepository Create(string profileType)
{
if(profileType == "A")
{
return this.aRepository;
}
if(profileType == "B")
{
return this.bRepository;
}
// and so on...
}
}
अब तुम सिर्फ यह सब तार की आप के लिए अपनी पसंद के डि कंटेनर प्राप्त करने की आवश्यकता ...
स्रोत
2010-01-30 18:18:36
उन अनुक्रमिक 'ifs' को प्रतिस्थापित किया जा सकता है एक तेज़/अधिक सुस्पष्ट 'स्विच/केस'। और 'प्रोफाइल टाइप' वास्तव में एक गणित होना चाहिए, एक मनमानी स्ट्रिंग नहीं। इसके अलावा यह एक अच्छा जवाब है। :) – Aaronaught
हां, वहां कोई असहमति नहीं है, लेकिन मैं ओपी द्वारा दिए गए एपीआई के साथ गया :) –
अगर मैं संकलन समय की संख्या संकलित करने के समय में नहीं जानता तो यह किस तरह से बदल सकता है? और यदि मेरे डब्ल्यूसीएफ में लॉग लाइब्रेरी और इन रिपॉजिटरीज़ के साथ केवल निर्भरता है, तो सबसे अच्छा DI कंटेनर विकल्प कहां है? एमईएफ इस परिदृश्य में एक अच्छा choiche है? – tartafe