【发布时间】:2020-08-23 21:24:33
【问题描述】:
大家好,我是软件开发的新手,我仍然不知道什么时候使用哪个,服务寿命是什么意思!这可能看起来很愚蠢,但请帮助我,我有一个界面:
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 或瞬态我不知道为什么,真的,任何人都可以为我说清楚吗?
【问题讨论】:
-
我很久以前写过一篇关于 .NET Core 中 DI 的文章:joonasw.net/view/aspnet-core-di-deep-dive 它可能会提供一些信息 :)
-
@juunas 我读到了,但是你能告诉我我应该选择哪个生命周期吗?在上述例子中?
-
如果您的 DbContext 注册为 Scoped(EF Core 的默认值),那么您的类在此处可以是 Scoped 或 Transient。它不能是 Singleton,因为它的生命周期会比 Scoped 更长。
-
@juunas 是的,因为如果注册为单身人士我会出错!但是你能告诉我这个生命周期吗?你所说的更高生命周期是什么意思?
-
@juunas 如果将我的所有服务都注册为范围,会导致问题吗?
标签: asp.net-core