c# - 基类中的属性注入
问题描述
在 ASP.NET Boilerplate 模板中,有一个AppServiceBase
具有两个属性:TenantManager
和UserManager
.
如果我需要使用这些属性,我应该执行以下操作:
public abstract class BaseClass
{
public TenantManager TenantManager { get; set; }
public UserManager UserManager { get; set; }
ctor(TenantManager service1, UserManager service2)
{
TenantManager = service1;
UserManager = service2;
}
}
所以我在派生类中请求这两个ctor
并将它们传递给基类:
public class DerivedClass : BaseClass
{
ctor(TenantManager service1, UserManager service2)
: base(service1, service2)
{
}
public void SomeMethod()
{
// Use base class properties
TenantManager.Something();
UserManager.Something();
}
}
在 ASP.NET Core DI 中,我可以执行以下操作:
public abstract class BaseClass
{
public TenantManager Service1 => HttpContext.RequestServices.GetService<TenantManager>();
public UserManager Service2 => HttpContext.RequestServices.GetService<UserManager>();
ctor()
{
}
}
派生类不必请求它们ctor
并将它们传递给基类:
public class DerivedClass : BaseClass
{
ctor(ISpecificService service)
{
// I can have other types injected,
// but TenantManager and UserManager will still be available to use
}
public SomeMethod()
{
// Use base class properties
Service1.Something();
Service2.Something();
}
}
那么,我怎样才能在 ABP 中实现上述目标呢?
我试过:
public abstract class BaseClass
{
public TenantManager TenantManager { get; set; }
public UserManager UserManager { get; set; }
ctor()
{
var t = IocManager.Instance.CreateScope();
TenantManager = t.Resolve<TenantManager>();
UserManager = t.Resolve<UserManager>();
}
}
但是,如果我在派生类中访问这些属性,它们已经被释放了。但是根据文档,它应该一直存在到我的课程发布为止。
解决方案
如果您没有在构造函数中使用范围,请不要创建范围。
属性注入模式无需在构造函数中解析即可工作。
public abstract class BaseClass
{
public TenantManager TenantManager { get; set; }
public UserManager UserManager { get; set; }
ctor()
{
}
}
推荐阅读
- r - R:使用相对重要性(relaimpo 包)构建预测的线性模型?
- java - .... Spring Boot 中构造函数的参数 0
- python - 无法使用 Django-CKEditor 上传图像(错误 400)
- azure - Azure 最佳实践
- latex - 表格标题错位且未生成表格列表
- python - 熊猫填写日期
- javascript - SQlite 在 NodeJS 中导致未定义的问题
- sorting - 使用 LDML 文件中指定的整理顺序进行行排序
- css - 尽管 CSS 验证器出错,是否可以使用 var() CSS 函数?
- c - 识别索引向量上的循环;制作列表,减去旋转