ASP Boilerplate - ITransient如何工作

问题描述 投票:0回答:1

据我所知,在abp中,当一个类实现ITransient接口时,它会在依赖注入系统中自动注册。

当我在ASPNetZero中创建一个新项目,并且一个类实现了ITransient时,我无法在其他项目中注入所述类,例如Application

使用以下代码段不允许我使用构造函数注入。

public interface ITrackAppService : ITransientDependency

public class TrackAppService : ITrackAppService

但是当我注册它时(即使该类没有实现ITransient),那么我可以使用构造函数注入。

IocManager.RegisterIfNot<ITrack, Track>();

我错误地理解了ITransient的工作原理吗?我如何使用Itransient,以便我可以使用构造函数依赖注入?

注意:我正在尝试向Application项目注入的类是在我创建的另一个项目中。

c# aspnetboilerplate abp
1个回答
0
投票

如果要为新项目注入接口,则无法以开箱即用的方式使用它。因为您的新项目不知道您的依赖项。每个使用DI的新项目都必须设置为AbpModule

查看示例模块声明。

[DependsOn(typeof(MyBlogCoreModule))]
public class MyBlogApplicationModule : AbpModule
{
    public override void Initialize()
    {
        IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
    }
}

查看课堂上的[DependsOn]属性。这有助于将项目注册到DI。

所以你需要做的是,

  1. 像我上面给你看到的那样,在新项目中创建一个新类。
  2. [DependsOn(typeof(YourApplicationServiceModule))]属性添加到此新模块。
© www.soinside.com 2019 - 2024. All rights reserved.