0

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

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

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

public interface ITrackAppService : ITransientDependency

public class TrackAppService : ITrackAppService

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

IocManager.RegisterIfNot<ITrack, Track>();

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

注意:我尝试注入 Application 项目的类位于我创建的另一个项目中。

4

1 回答 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))]属性添加到这个新模块。
于 2019-03-15T05:57:17.323 回答