[英]Property injection in base class
在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()
{
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.