বিল্ট-ইন IoC কন্টেইনার রেজিস্টার করা সার্ভিস টাইপের লাইফটাইম পরিচালনা করে। এটি নির্দিষ্ট লাইফটাইমের ভিত্তিতে সার্ভিস ইনস্ট্যান্স স্বয়ংক্রিয়ভাবে ডিসপোজ করে।
বিল্ট-ইন IoC কন্টেইনার তিন ধরনের লাইফটাইম সাপোর্ট করে:
সিঙ্গলটন (Singleton)
IoC কন্টেইনার অ্যাপ্লিকেশনের পুরো লাইফটাইম boyunca একটি সার্ভিসের একক ইনস্ট্যান্স তৈরি করে এবং শেয়ার করে।
ট্রানজিয়েন্ট (Transient)
প্রতিবার সার্ভিস রিকোয়েস্ট করার সময় IoC কন্টেইনার নির্দিষ্ট সার্ভিস টাইপের নতুন ইনস্ট্যান্স তৈরি করে।
স্কোপড (Scoped)
IoC কন্টেইনার প্রতি রিকোয়েস্টে একবার নির্দিষ্ট সার্ভিস টাইপের ইনস্ট্যান্স তৈরি করে এবং একটি রিকোয়েস্টের মধ্যে শেয়ার করা হয়।
উদাহরণ
public interface ILog
{
void Info(string str);
}
class MyConsoleLogger : ILog
{
public void Info(string str)
{
Console.WriteLine(str);
}
}
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// সিঙ্গলটন রেজিস্ট্রেশন
services.Add(new ServiceDescriptor(typeof(ILog), new MyConsoleLogger()));
// ট্রানজিয়েন্ট রেজিস্ট্রেশন
services.Add(new ServiceDescriptor(typeof(ILog), typeof(MyConsoleLogger), ServiceLifetime.Transient));
// স্কোপড রেজিস্ট্রেশন
services.Add(new ServiceDescriptor(typeof(ILog), typeof(MyConsoleLogger), ServiceLifetime.Scoped));
}
}
নিচের উদাহরণে এক্সটেনশন মেথড ব্যবহার করে টাইপ রেজিস্টার করার পদ্ধতি দেখানো হয়েছে:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// জেনেরিক সিনট্যাক্স
services.AddSingleton();
services.AddTransient();
services.AddScoped();
// নন-জেনেরিক সিনট্যাক্স
services.AddSingleton(typeof(ILog), typeof(MyConsoleLogger));
services.AddTransient(typeof(ILog), typeof(MyConsoleLogger));
services.AddScoped(typeof(ILog), typeof(MyConsoleLogger));
}
}