मेरे पास निम्नलिखित सेवाएं हैं:

  1. SecuredStorageService()
  2. ApiService({this.authService})
  3. AuthService({this.securedStorageService, this.apiService})
  4. RegisterService({this.apiService, this.securedStorageService})

जो मुझे लिखने के लिए प्रेरित करता है:

providers: [
  Provider<SecuredStorageService>.value(value: SecuredStorageService()),
  ProxyProvider<AuthService, ApiService>(
    builder: (_, auth, __) => ApiService(authService: auth),
  ),
  ProxyProvider2<ApiService, SecuredStorageService, RegisterService>(
    builder: (_, api, storage, __) => RegisterService(apiService: api, securedStorageService: storage),
  ),
  ProxyProvider2<ApiService, SecuredStorageService, AuthService>(
    builder: (_, api, storage, __) => AuthService(apiService: api, securedStorageService: storage),
  ),
],

मैं इस बिंदु तक बता सकता हूं कि यह पहले से ही गन्दा लग रहा है। लेकिन ऐसा नहीं है। जब मैं ऐप चलाता हूं, तो मुझे निम्न त्रुटि मिलती है:

enter image description here

तो मैं क्या करूं? मैं सभी ProxyProvider से पहले Provider<AuthService> जोड़ता हूं। लेकिन फिर, AuthService का निर्माण दो बार किया जा रहा है! जो एक विलक्षण उदाहरण होने का पूरा बिंदु खो देता है (या नहीं?)

मेरा मुख्य लक्ष्य एंगुलर या लारवेल की तरह ही एक प्रकार का निर्भरता इंजेक्शन बनाना है।

4
Eliya Cohen 7 जुलाई 2019, 23:53

1 उत्तर

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

ProxyProvider और विजेट सामान्य रूप से सर्कुलर निर्भरता के खिलाफ लड़ते हैं, क्योंकि यह आमतौर पर "स्पेगेटी कोड" का संकेत होता है (और देखें)

जैसे, ProxyProvider का उपयोग करके आप एक गोलाकार निर्भरता ग्राफ नहीं बना पाएंगे।

यदि आप वास्तव में यही चाहते हैं, तो Provider.value का उपयोग करने और अपनी निर्भरता को मैन्युअल रूप से संभालने पर विचार करें।

4
Rémi Rousselet 8 जुलाई 2019, 01:07