یک نکتهی تکمیلی: امکان تزریق وابستگیهای سرویسهای سفارشی، در سازندهی کلاس Startup برنامههای وب
اگر به سازندهی پیشفرض کلاس Startup یک برنامهی وب دقت کنید، چنین تزریق وابستگی در قالب ابتدایی آن وجود دارد:
در اینجا ممکن است چند سؤال مطرح شوند:
الف) چه سرویسهای پیشفرض دیگری را نیز میتوان در اینجا تزریق کرد؟
ب) آیا میتوان سرویسهای سفارشی تهیه شدهی توسط خودمان را نیز در اینجا تزریق کرد؟
الف) بر روی ابتدای متد ConfigureServices کلاس Startup یک break-point را قرار دهید. لیست پارامتر services آن، شامل سرویسهای پیشفرضی است که قابلیت تزریق وابستگیها را در سازندهی این کلاس دارند و بیش از 40 کلاس هستند.
ب) برای این منظور به فایل Program.cs مراجعه کرده و سرویس سفارشی خود را به صورت زیر، توسط متد ConfigureServices آن، اضافه کنید:
اکنون ISomeService سفارشی ما قابلیت تزریق در سازندهی کلاس Startup را نیز پیدا کردهاست (علاوه بر سایر نقاط برنامه):
اگر به سازندهی پیشفرض کلاس Startup یک برنامهی وب دقت کنید، چنین تزریق وابستگی در قالب ابتدایی آن وجود دارد:
public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; }
الف) چه سرویسهای پیشفرض دیگری را نیز میتوان در اینجا تزریق کرد؟
ب) آیا میتوان سرویسهای سفارشی تهیه شدهی توسط خودمان را نیز در اینجا تزریق کرد؟
الف) بر روی ابتدای متد ConfigureServices کلاس Startup یک break-point را قرار دهید. لیست پارامتر services آن، شامل سرویسهای پیشفرضی است که قابلیت تزریق وابستگیها را در سازندهی این کلاس دارند و بیش از 40 کلاس هستند.
ب) برای این منظور به فایل Program.cs مراجعه کرده و سرویس سفارشی خود را به صورت زیر، توسط متد ConfigureServices آن، اضافه کنید:
using CoreIocServices; using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; namespace CoreIocSample02 { public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureServices(serviceCollection => { serviceCollection.AddScoped<ISomeService, SomeService>(); }) .UseStartup<Startup>(); } }
namespace CoreIocSample02 { public class Startup { private readonly ISomeService _someService; public Startup(IConfiguration configuration, ISomeService someService) { Configuration = configuration; _someService = someService; } public IConfiguration Configuration { get; }