【问题标题】:How to achieve Property Injection like IAbpSession?如何实现像 IAbpSession 这样的属性注入?
【发布时间】:2018-05-10 15:49:38
【问题描述】:

我正在尝试实现我自己的自定义IAbpSession,但我不知道如何实现与IAbpSession 相同的属性注入。 我的AppServiceBase 如下:

public abstract class EdwardAppServiceBase : ApplicationService
{
    public TenantManager TenantManager { get; set; }

    public UserManager UserManager { get; set; }

    protected EdwardActiveUnitOfWork EdwardActiveUnitOfWork => (EdwardActiveUnitOfWork)UnitOfWorkManager.Current;

    protected IEdwardSession EdwardSession { get; set; } 
    // protected IEdwardSession EdwardSession => AbpSession as IEdwardSession;

    protected SensingStoreCloudAppServiceBase()
    {
        // EdwardSession = NullEdwardSession.Instance;
        LocalizationSourceName = SensingStoreCloudConsts.LocalizationSourceName;
    }
}

如果我取消注释 EdwardSession = NullEdwardSession.Instance;,我总是得到 NullEdwardSession 而不是 IEdwardSession 实现:EdwardSession

我只能AbpSession as IEdwardSession

ABP如何注入IAbpSession并在ApplicationService中设置其值?

【问题讨论】:

    标签: c# asp.net dependency-injection castle-windsor aspnetboilerplate


    【解决方案1】:

    ABP 使用 Castle Windsor 作为依赖,property injection:

    如何注入属性

    依赖项的属性注入旨在在创建组件时在组件激活期间完成。默认情况下,通过PropertiesDependenciesModelInspector 来完成确定哪些属性用于注入的责任 - 一个IContributeComponentModelConstruction 实现,它使用以下所有标准来确定一个属性是否代表一个依赖项:

    • 具有“公共”可访问设置器
    • 是实例属性
    • 如果ComponentModel.InspectionBehavior 设置为PropertiesInspectionBehavior.DeclaredOnly,则不继承
    • 没有参数
    • 未使用Castle.Core.DoNotWireAttribute 属性进行注释

    那就改成public:

    // protected IEdwardSession EdwardSession { get; set; }
    public IEdwardSession EdwardSession { get; set; }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 2014-07-13
      • 2019-02-12
      • 2020-02-09
      • 2013-11-09
      相关资源
      最近更新 更多