путаница с использованием переходных процессов, областей видимости или синглтонов в .NetCore - PullRequest
2 голосов
/ 08 мая 2020

Привет, ребята, я новичок в разработке программного обеспечения, я до сих пор не знаю, когда его использовать, в чем смысл срока службы! Это может показаться глупым, но, пожалуйста, помогите мне, у меня есть интерфейс:

 public  interface IAccessInfo
{
    public IEnumerable<AccessInfo> getResult();
}

он должен возвращать мне информацию о моих Турбинах; вот его реализация:

 public class AcessInfoData:IAccessInfo
{
    private DbContextClass db;
    public AcessInfoData(DbContextClass context)
    {
        db = context;

    }
    public IEnumerable<AccessInfo> getResult()
    {     
    var turbines = (from c in db.accessinf                         
                      where s.user_id == "i0004912"
                        select new AccessInfo
                        {
                            InfoType = c.type,
                            TurbineId = c.m_plc_id.ToString(),
                            TurbineIP = c.turbine_ip.ToString(),
                            TurbineIdSorting = c.turbine_id,
                            Blade = c.blade,
                            Certification = c.certification,

                       }).Distinct();

        return turbines;

    }
}

он получает экземпляр моей БД и данные; и в моем контроллере Я использую его так:

 public class AcessInfoController : ControllerBase
{

  private IAccessInfo _acess;
  public  AcessInfoController(IAccessInfo access)
    {
        _acess = access;       

    }
    [HttpGet]
    public IActionResult Index()
    {
        var rsult = _acess.getResult();
        return Ok( rsult);
    }
}

теперь в Startup я зарегистрировал его:

  services.AddScoped<IAccessInfo, AcessInfoData>();

он работает, но если вы sk мне, почему я использую Scoped, а не Singleton или временный, я понятия не имею, почему на самом деле кто-нибудь может мне это разъяснить?

1 Ответ

1 голос
/ 08 мая 2020

Я постараюсь немного объяснить упомянутые случаи:

scoped : для всех потребностей объекта в течение жизни операции (например, запроса от клиента) создается единственный экземпляр объекта. (It means that only one instance of the object is sent for all requirements during life time of a request)

Singleton : Создает только один экземпляр объекта и отправляет его для всех требований в области приложения. (For all needs everywhere in the program, only one instance of the object is sent, a bit like static objects).

Transient : Io c контейнер, создает экземпляр объекта всякий раз, когда он нужен коду, то есть создает экземпляр для каждого требования в любом месте программы и в любое время, что означает, что если программе требуется объект 3 раза, она создает независимый экземпляр для каждого.

Экземпляр : в этом случае каждый раз, когда требуется объект, только один его экземпляр предоставляется программе, которую вы определили при запуске раздел. (определяя его в разделе запуска, вы указываете, как создать экземпляр).

Я надеюсь уменьшить некоторые двусмысленности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...