স্টার্টআপ ক্লাসে সবকিছু যুক্ত করার পাশাপাশি এএসপি.নেট কোর ৩.১ এর নির্ভরতাগুলি নিবন্ধ করার জন্য কি শক্তিশালী উপায় আছে?


9

আমার একটি এএসপি.নেট কোর 3.1 প্রকল্প রয়েছে। সাধারণত, আমি ক্লাসে ConfigureServices()পদ্ধতিটি ব্যবহার করে যে কোনও নির্ভরতা নিবন্ধন করি Startup.cs

তবে, আমি নিজেকে অনেকগুলি নির্ভরতা নিবন্ধ করে ConfigureServices()দেখতে দেখতে দেখতে দেখতে বিশাল লাগে! আমি জানি আমি সম্ভবত একটি স্ট্যাটিক পদ্ধতির একটি এক্সটেনশন পদ্ধতি তৈরি করতে পারি এবং এটি কনফিগার সার্ভিস () `শ্রেণি থেকে কল করতে পারি তবে আরও ভাল উপায় আছে কিনা তা ভেবে অবাক হচ্ছি।

আইওসি পাত্রে নির্ভরতা নিবন্ধ করার কোনও উপায় যদি এ জাতীয় সময়ে একবারে এটির সংজ্ঞা না দেয়

services.AddScoped<Interface, Class>();
.... 200 lines later
services.AddScoped<ISettings, Settings>()

উত্তর:


10

কাস্টম এক্সটেনশন পদ্ধতিগুলিতে সম্পর্কিত নির্ভরতাগুলি গোষ্ঠীভুক্ত করা এটি করার একটি খুব সাধারণ উপায়। এএসপি.নেট কোর ইতিমধ্যে অনেকগুলি অভ্যন্তরীণ পরিষেবার জন্য এটি করে থাকে এবং আপনি সহজেই তার উপরে প্রসারিত করতে পারেন এবং আপনার অ্যাপ্লিকেশনটির জন্য আপনার প্রয়োজন মতো সেট আপ করতে পারেন। প্রমাণীকরণ এবং অনুমোদনের জন্য উদাহরণস্বরূপ:

public IServiceCollection AddSecurity(this IServiceCollection services)
{
    services.AddAuthentication()
        .AddCookie();

    service.AddAuthorization(options =>
    {
        options.DefaultPolicy = …;
    });

    return services;
}

আপনি আপনার অ্যাপ্লিকেশন-নির্দিষ্ট পরিষেবাগুলির জন্য একই কাজ করতে পারেন এবং এটিকে পৃথক এক্সটেনশন পদ্ধতিতে যৌক্তিকভাবে গ্রুপ করতে পারেন।

আপনার যদি প্রচুর সার্ভিস রেজিস্ট্রেশনগুলির সাথে সাদৃশ্যপূর্ণ থাকে তবে আপনি একটি কনভেনশন-ভিত্তিক নিবন্ধকরণও নিয়োগ করতে পারেন যেমন স্ক্রিটর ব্যবহার করে । উদাহরণস্বরূপ, এটি একটি নির্দিষ্ট নেমস্পেসের মধ্যে সমস্ত পরিষেবাকে তাদের নিজ নিজ ইন্টারফেসের জন্য ক্ষণস্থায়ী হিসাবে নিবন্ধিত করে:

services.Scan(scan => scan
    .FromAssemblyOf<Startup>()
        .AddClasses(c => c.InNamespaces("MyApp.Services"))
            .AsImplementedInterfaces()
            .WithTransientLifetime()
);

স্ক্রুরিটর পরিষেবাগুলির জন্য স্ক্যান করার জন্য খুব জটিল নিয়মের অনুমতি দেয়, সুতরাং আপনার পরিষেবাগুলি যদি কিছু নিদর্শন অনুসরণ করে তবে আপনি সম্ভবত এটির জন্য একটি নিয়ম নিয়ে আসতে সক্ষম হবেন।


3

একটি কাস্টম বৈশিষ্ট্য তৈরি করুন (অটোবাইন্ডআট্রিবিউট নামে পরিচিত)

public class AutoBindAttribute : Attribute
{
}

এটি বেলোর মতো ব্যবহার করুন (আপনি যে সমস্ত প্রয়োগগুলি স্বয়ংক্রিয়ভাবে [অট্রোবাইন্ড] এর সাথে আবদ্ধ করতে চান তা সজ্জিত করুন)

public interface IMyClass {}

[AutoBind]
public class MyClass : IMyClass {}

এখন আইএসওয়ার্স সংগ্রহের জন্য একটি এক্সটেনশন পদ্ধতি তৈরি করুন

public class ServiceCollectionExtentions
{
    public static void AutoBind(this IServiceCollection source, params Assembly[] assemblies)
    {
       source.Scan(scan => scan.FromAssemblies(assemblies)
        .AddClasses(classes => classes.WithAttribute<AutoBindAttribute>())
        .AsImplementedInterfaces()
        .WithTransientLifetime();
    }
}

এখন এটি কল করুন স্টার্টআপ

public class Startup
{

    public void ConfigureServices(IServiceCollection services)
    {
        services.AutoBind(typeof(Startup).Assembly);
    }

}

দ্রষ্টব্য: আপনি ServiceCollectionExtentionsসিঙ্গলটন ইত্যাদির মতো সমস্ত স্কোপ সমর্থন করার জন্য শ্রেণীর উন্নতি করতে পারেন এই উদাহরণটি কেবলমাত্র ক্ষণস্থায়ী জীবনকালকে দেখায়।

উপভোগ করুন !!!


0

যা উল্লেখ করা হয়েছিল তা ছাড়াও।

ব্যক্তিগতভাবে আমি প্রতিটি সমাবেশে নির্ভরতা নিবন্ধীকরণের জন্য পৃথক শ্রেণি পেতে চাই। এটি ডান স্তরে ক্লাস ব্যবহারের উপর আরও নিয়ন্ত্রণ যুক্ত করে এবং internalকোন আইএমও ভাল তা তাদের তৈরি করতে দেয় ।

scanমেকানিজম ব্যবহার করবেন কিনা তা আপনার উপর নির্ভর করে। কিছু ফ্রেমওয়ার্ক ডিফল্টরূপে এটি দেয়। শ্রেণি / পদ্ধতিগুলির সেটগুলিতে অনুরূপ নির্ভরশীলতাগুলির গোষ্ঠীভুক্তকরণের পরিবর্তে, কোনও পরিবর্তনগুলির জন্য একটি সুসংগত স্থানে যুক্তি সমাধানের সমাধানে সহায়তা করা উচিত। আপনি উভয় পদ্ধতির একত্রিত করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.