मैं सिंगल-विधि इंटरफेस के बजाय नामित प्रतिनिधियों का उपयोग कर प्रयोग कर रहा हूं। यह, कोड आकार के लिए कुछ फायदे हैं के रूप में हम से (हटाया मामले को बढ़ा-चढ़ा के लिए नहीं इतनी के रूप में कुछ लाइनब्रेक) जा सकते हैं:कैसल विंडसर के साथ स्थैतिक बंद करने के लिए कोई आसान तरीका है?
public interface IProductSource
{
IEnumerable<Product> GetProducts();
}
public class DataContextProductSource : IProductSource
{
private readonly DataContext _DataContext;
public DataContextProductSource(DataContext dataContext)
{
if (dataContext == null) throw new ArgumentNullException("dataContext");
_DataContext = dataContext;
}
public IEnumerable<Product> GetProducts()
{
return _DataContext.Products.AsEnumerable();
}
}
रहे हैं:
public delegate IEnumerable<Product> DGetProducts();
public static class DataContextFunctions
{
public DGetProducts GetProducts(DataContext dataContext)
{
if (dataContext == null) throw new ArgumentNullException("dataContext");
return() => dataContext.Products.AsEnumerable();
}
}
यह मूलतः तथ्य का लाभ ले जा रहा है कि एक बार जब आप निर्भरता इंजेक्शन के साथ काफी दूर जाते हैं, तो बहुत से वर्ग बंद होने से थोड़ा अधिक हो जाते हैं। उन वर्गों को लम्बास लौटने वाले कार्यों के साथ प्रतिस्थापित किया जा सकता है। संबंधित कार्यों के पूरे सेट (जिन्हें किसी भी परिवर्तनीय स्थिति को समाहित करने की आवश्यकता नहीं है, लेकिन "मानक" निर्भरता इंजेक्शन में कक्षाओं का उपयोग करके व्यक्त किया गया होगा), फिर उसे एक स्थिर वर्ग (या "मॉड्यूल" VB parlance में) में घुमाया जा सकता है। ।
यह सब ठीक है और अच्छा है, लेकिन मुझे कैसल विंडसर के साथ इन स्थिर तरीकों को पंजीकृत करने का सबसे अच्छा तरीका खोजने में परेशानी हो रही है। कोई निर्भरता के साथ तरीके आसान कर रहे हैं:
Component.For<DGetIntegers>().Instance(Integers.GetOneToTen)
लेकिन ऊपर से हमारे DataContextFunctions.GetProducts कुछ निर्भरता है। सबसे अच्छा तरीका है मैं इस रजिस्टर करने के लिए मिल गया है है:
Component.For<DGetProducts>().UsingFactoryMethod(
kernel => DataContextFunctions.GetProducts(kernel.Resolve<DataContext>())
यह काफी वर्बोज़ प्राप्त कर सकते हैं, और स्पष्ट रूप से प्रत्येक निर्भरता के लिए सीधे गिरी पूछने के लिए होने तरह की बात एक सा हरा दिया। मुझे ऐसा लगता है कि एक कंटेनर की सभी स्थिर जानकारी की आवश्यकता होनी चाहिए, इसलिए ऐसा करना संभव होना चाहिए।
सवाल यह है कि कैसल विंडसर (या किसी अन्य कंटेनर) के पास ऐसा करने का एक आसान तरीका है जिसे मैंने याद किया है, या क्या तकनीकी समस्याएं उत्पन्न हुई हैं, या क्या यह बहुत ही उपयोगी मामला है शामिल?
धन्यवाद, Krzysztof। मैं इसे कभी-कभी कोशिश करूंगा और परिणामों पर वापस रिपोर्ट करूंगा। शुरू करने के लिए एक अच्छी जगह के लिए कोई लिंक? – ninjeff
@ninjeff अगर आप 2.5.x पर हैं तो दस्तावेज आपको दस्तावेज़ों को शुरू करना चाहिए .castleproject.org/(S(hucszcu5ilznbv45fvrim355))/... यदि आप 3.0 बीटा पर हैं, तो कुछ एपीआई परिवर्तन हुए हैं हालांकि अवधारणाएं अभी भी हैं वही। मुझे बताएं कि क्या डॉको –
से कम है, तो मैं यह काम करने में सक्षम था। मैं एक घंटे में अपने उत्तर के साथ एक लिंक और विवरण पोस्ट करूंगा (मेरे जैसे कम-कर्मा उपयोगकर्ता आठ घंटे के भीतर अपने प्रश्नों का उत्तर नहीं दे सकते हैं)। – ninjeff