मेरे पास एक वर्ग (कक्षा ए) है जिसमें मेथडए नामक एक विधि है।

class A
{
    public Dictionary<string, double> methodA(double param1, double param2)
    {
      //do calculations
      return result;
    }

}

मेरे पास 9 अन्य वर्ग हैं (कक्षा बी, सी, ....)। उन सभी के पास myField नाम का एक क्षेत्र है। myField के मान की गणना क्लास ए के मेथड ए का उपयोग करके की जाती है। वे इस तरह दिखते हैं:

class B
{
    private Dictionary<string, double> myField;
    private readonly A a = new A();
    public B()
    {
        myField = a.methodA(param1, param2)
    }
    // methods using myField    
}

Param1 और param2 ऐसे मान हैं जो कभी नहीं बदलते हैं और कहीं और संग्रहीत किए जाते हैं। तो myField का मान सभी वर्गों के लिए और एप्लिकेशन के पूर्ण रनटाइम पर समान है। अब डिजाइन में बदलाव किया गया है। मेथडए अपडेट किया जाता है और जांचता है कि क्या कोई निश्चित शर्त सही है और स्थिति और पैरामीटर param3, param4 के आधार पर myField के मान की गणना करता है जो रनटाइम के दौरान बदल रहे हैं।

public Dictionary<string, double> methodA(double param1, double param2, double param3, double param4)
{
    if(condition)
    {
        result = .....
    } else {
        result = .....
    }      
    return result;
}

स्थिति शुरू में गलत है और रनटाइम के दौरान केवल एक बार बदलती है। उसके बाद myField का मान रनटाइम के अंत तक समान रहना चाहिए।

मुझे इसे अपनी कक्षा परिभाषाओं में कैसे लागू करना चाहिए, ताकि स्थिति के सही होने के बाद myField का मान एक बार अपडेट हो जाए और रनटाइम के अंत तक स्थिर रहे?

0
MehdiB 1 जून 2018, 14:21

2 जवाब

सबसे बढ़िया उत्तर

आपने एक टैग के रूप में निर्भरता-इंजेक्शन जोड़ा है, फिर भी आप इसे अपने उदाहरणों में उपयोग नहीं करते हैं। इसे कार्यान्वित करें और कक्षा ए को एक इंजेक्शन योग्य सेवा (इंटरफ़ेस का उपयोग करके) बनाएं जिसमें सिंगलटन की तरह जीवन चक्र हो, फिर आप इसे अपने अन्य वर्गों और वॉयला में इंजेक्ट करें, आपके पास समान मूल्यों के साथ हर जगह एक ही उदाहरण होगा। यहां बताया गया है कि मैं इसे आमतौर पर कैसे करता हूं:

Container.RegisterType<IAPICacheManager, APICacheManager>(new ContainerControlledLifetimeManager());

फिर जादुई रूप से यह आपके कंस्ट्रक्टर्स को पास हो जाता है:

public BinanceService(IAPICacheManager apiCache, string instanceName, List<object> tracking, IDataService dataService, IMapper mappingEngine) : base(instanceName, tracking)
    {
        _mappingEngine = mappingEngine;
        _dataService = dataService;

        if (apiCache != null)
        {
            _apiCache = apiCache;

            _cacheEnabled = true;
.....

शुरू करने के लिए यहां एक उदाहरण दिया गया है: Unity

1
PmanAce 1 जून 2018, 14:46

यदि आपकी सभी कक्षाओं में myField का मान समान होना चाहिए, तो मैं इसे एक सार्वजनिक स्थैतिक क्षेत्र बनाने पर विचार करूंगा

0
TempAnonName 1 जून 2018, 14:32