我有2个服务:用于数据库操作的IDbStorage和IExceptionManager异常管理。 ExceptionManager类本身依赖于IDbStorage的实例:
public class ExceptionManager : IExceptionManager
{
private IDbStorage _CurrentDbStorage;
public IDbStorage CurrentDbStorage
{
get { return _CurrentDbStorage; }
}
public ExceptionManager(IDbStorage currentDbStorage)
{
_CurrentDbStorage = currentDbStorage;
}
}
在启动中,我声明:
services.AddTransient<IDbStorage, OracleDbStorage>();
services.AddTransient<IExceptionManager, ExceptionManager>();
在所有控制器中,我都使用了这两种服务。 F.e:
public abstract class BusinessObjectManagementController<T1> : ControllerBase where T1 : BusinessObject
{
private IDbStorage _CurrentDbStorage;
public IDbStorage CurrentDbStorage
{
get { return _CurrentDbStorage; }
}
private IExceptionManager _CurrentExceptionMgr;
public IExceptionManager CurrentExceptionMgr
{
get { return _CurrentExceptionMgr; }
}
public BusinessObjectManagementController(IDbStorage currentDbStorage, IExceptionManager currentExceptionMgr)
{
_CurrentDbStorage = currentDbStorage;
_CurrentExceptionMgr = currentExceptionMgr;
}
}
一切正常,但是我不确定是否将IDbStorage的同一实例注入CurrentExceptionMgr或创建新实例?
谢谢。
答案 0 :(得分:1)
对于.NET Core DI,存在三种不同的服务寿命。您已将IDbStorage
声明为临时的,因此每次请求服务时都会创建OracleDbStorage
的新实例。这是.NET Core文档中的相关内容:
每次请求时都会创建瞬态生命周期服务。此生命期最适合轻量级,无状态服务。
范围内的生命周期服务每个请求创建一次。
单生命周期服务是在首次请求它们时创建的(或者在运行ConfigureServices并使用服务注册指定实例时创建)。每个后续请求都使用相同的实例。