سعید صفایی | SAEED SAFAEE
قدم به قدم تزریق وابستگی و طول عمر سرویس در Net Core.
تزریق وابستگی یک الگوی طراحی است که در بین برنامه نویسان مرسوم و اغلب پیشنهاد می شود.
در این مقاله، توضیح خواهم داد که چگونه می توانیم از Dependency Injection استفاده کنیم و تفاوت سه طول عمر services در برنامه های دات نت کور(dotnet core3) چیست.
Transient و Scoped و Singleton
ما یک سرویس رو به صورت عموم تعریف میکنیم
public class BaseModel
{
public int ID { get; set; } // Guid
}
public interface IGenericService<T> where T : BaseModel
{
Task<List<T>> GetList();
Task<T> GetItem(Guid ID);
Task<bool> Add(T);
}
BaseModel حالا مدل کاربر رو درست میکنم و ارث میبریم از
public class User : BaseModel
{
public Guid UID { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public string Email { get; set; }
}
حالا باید سرویس کاربر را درست کنیم
public interface IUserService: IGenericService<Models.User>
{
}
public class UserService : IServices.IUserService
{
public async Task<List<User>> GetList()
{
//return list users from db
}
public async Task<User> GetItem(Guid ID)
{
//return one user
}
public async Task<bool> Add(model)
{
//add…
}
}
Startup
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddScoped<IUserService, UserService>();
}
حالا زمان اون رسیده که یک کنترلر بسازیم و از سرویس استفاده کنیم:
public class UserController : ControllerBase
{
private readonly Services.IUserService _service;
public UserController(Services.IUserService service)
{
_service = service;
}
[HttpGet]
public async Task<ActionResult> List()
{
var list = await _service.GetList();
return list;
}
}
اما طول عمر سرویس ها(نوع سرویس ها):
نوع Transient:
این نوع برای حالت های سبک است، هرجا که درخواست شود ایجاد می شود.
نوع Scoped:
طول این نوع در هر درخواست ایجاد میشود. برای حالت های معمول این مورد پیشنهاد میشود.
نوع Singleton:
فقط یک نمونه در کل برنامه ساخته می شود.
سعی کردم که کاملا کد محور و کاربردی باشه، امیدوارم مفید واقع شده باشه.