ASP 样板 - ITransient 如何工作

ASP Boilerplate - How does ITransient work

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

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

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

public interface ITrackAppService : ITransientDependency

public class TrackAppService : ITrackAppService

但是当我注册它时(即使 class 没有实现 ITransient),然后我可以使用构造函数注入。

IocManager.RegisterIfNot<ITrack, Track>();

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

注意:class 我试图注入应用程序项目是在我创建的另一个项目中。

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

查看示例模块声明。

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

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

所以你需要做的是,

  1. 像我上面展示的那样在新项目中创建一个新的 class。
  2. [DependsOn(typeof(YourApplicationServiceModule))] 属性添加到这个新模块。