ধরুন আমার কাছে এটি Service
কনস্ট্রাক্টরের মাধ্যমে নির্ভরতা পেয়েছে তবে এটি ব্যবহারের আগে কাস্টম ডেটা (প্রসঙ্গ) দিয়েও আরম্ভ করা দরকার:
public interface IService
{
void Initialize(Context context);
void DoSomething();
void DoOtherThing();
}
public class Service : IService
{
private readonly object dependency1;
private readonly object dependency2;
private readonly object dependency3;
public Service(
object dependency1,
object dependency2,
object dependency3)
{
this.dependency1 = dependency1 ?? throw new ArgumentNullException(nameof(dependency1));
this.dependency2 = dependency2 ?? throw new ArgumentNullException(nameof(dependency2));
this.dependency3 = dependency3 ?? throw new ArgumentNullException(nameof(dependency3));
}
public void Initialize(Context context)
{
// Initialize state based on context
// Heavy, long running operation
}
public void DoSomething()
{
// ...
}
public void DoOtherThing()
{
// ...
}
}
public class Context
{
public int Value1;
public string Value2;
public string Value3;
}
এখন - প্রাসঙ্গিক ডেটা আগে জানা ছিল না তাই আমি এটিকে নির্ভরতা হিসাবে নিবন্ধন করতে পারি না এবং পরিষেবাতে ইনজেক্ট করতে ডিআই ব্যবহার করতে পারি না
উদাহরণ ক্লায়েন্টকে এরকম দেখাচ্ছে:
public class Client
{
private readonly IService service;
public Client(IService service)
{
this.service = service ?? throw new ArgumentNullException(nameof(service));
}
public void OnStartup()
{
service.Initialize(new Context
{
Value1 = 123,
Value2 = "my data",
Value3 = "abcd"
});
}
public void Execute()
{
service.DoSomething();
service.DoOtherThing();
}
}
আপনি দেখতে পাচ্ছেন - এখানে অস্থায়ী সংযুক্তি রয়েছে এবং পদ্ধতি কোডের সাথে গন্ধ জড়িত রয়েছে, কারণ আমাকে প্রথমে কল service.Initialize
করতে service.DoSomething
এবং service.DoOtherThing
তারপরে কল করতে হবে ।
অন্যান্য সমস্যাগুলি যা আমি এই সমস্যাগুলি দূর করতে পারি?
আচরণের অতিরিক্ত ব্যাখ্যা:
ক্লায়েন্টের প্রতিটি উদাহরণের পরিষেবাটির নিজস্ব উদাহরণটি ক্লায়েন্টের নির্দিষ্ট প্রসঙ্গের ডেটা দিয়ে শুরু করা দরকার। সুতরাং, সেই প্রসঙ্গে ডেটা স্থির বা আগে থেকে জানা যায় না তাই এটি ডিআই দ্বারা কনস্ট্রাক্টারে ইনজেকশন দেওয়া যায় না।