簡體   English   中英

基類的屬性注入

[英]Property injection in base class

在ASP.NET Boilerplate模板中,有一個AppServiceBase ,它具有兩個屬性: TenantManagerUserManager

如果需要使用這些屬性,則應執行以下操作:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM