سعید صفایی | SAEED SAFAEE

قدم به قدم تزریق وابستگی و طول عمر سرویس در Net Core.

سعید صفایی دیدگاه
قدم به قدم تزریق وابستگی و طول عمر سرویس در 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:
فقط یک نمونه در کل برنامه ساخته می شود.


سعی کردم که کاملا کد محور و کاربردی باشه، امیدوارم مفید واقع شده باشه.







⁠⁠⁠⁠⁠⁠⁠

دیدگاه خود را بگذارید