logo

بهترین ها همه در یک جا

مطالب آموزشی

ثبت اتومات سرویس ها توسط Scrutor در DotNet 6

اشتراک گذاری :

Scrutor 

برای اضافه کردن یک سری قابلیت ها نظیر Scan کردن اسمبلی و یا Decoration به Microsoft.Extensions.DependencyInjection  موجود یک Extension Method با نام Scrutor  طراحی شده است که توسط آن میتونید یک سری قابلیت های بیشتر داشته باشید و به طور مثال برای Scan کردن یک Assembly برای اتومات کردن تعریف سرویس ها در Startup برنامه، نیاز به یک DI Container جدید نداشته باشید و با DI Container پیش فرض که Built In هست نیاز های پروژه رو برطرف کنید و از طرفی با این کار تا حد زیادی مشکل فراموشی تعریف کردن سرویس ها در DI Container حل میشه و از ارورهای آتی پیشگیری میشه.

برای نصب کافیه اون رو از نیوگت دریافت کنید.

Install-Package Scrutor

سپس برای استفاده در dotnet core 5  وارد فایل startup و در dot net 6 وارد فایل program بشید و در قسمت تعریف سرویس ها به عنوان مثال از کدی شبیه کد زیر استفاده کنید.

builder.Services.Scan(scan => scan.FromAssemblyOf<UserService>()
    .AddClasses(c => c.InExactNamespaceOf<UserService>())
    .AsSelf()
    .AsImplementedInterfaces().WithScopedLifetime()
    .FromAssemblyOf<SmsService>()
    .AddClasses(c => c.InExactNamespaceOf<SmsService>())
    .AsSelf()
    .AsImplementedInterfaces().WithScopedLifetime()
);

نکته اول : در هنگام اضافه کردن AddClasses نام یکی از سرویس هایی که در NameSpace مورد نظر وجود دارد را انتخاب کنید ، تا به صورت اتومات برای سایرین نیز توسط Reflection انتخاب شود.

نکته دوم : AsSelf برای سرویس هایی است که بدون interface میخواهیم آنها را inject کنیم.

نکته سوم : میشه چندین نوع سرویس رو در داخل Scan پشت سر هم رجیستر کرد . ( برای مثال در اینجا UserService در یک NameSpace و اسمبلی جدا و SmsService در یک NameSpaceو اسمبلی دیگر است ) همچنین میشه به آنها LifeCycle های مختلفی اعمال کرد.

آدرس صفحه گیت پروژه : https://github.com/khellang/Scrutor


برنامه نویسی آموزش
avatar

برنامه نویس و توسعه دهنده ارشد وب
کارشناس ارشد مدیریت فناوری اطلاعات