【问题标题】:ASP Boilerplate - How does ITransient workASP 样板 - ITransient 如何工作
【发布时间】:2019-03-15 02:00:43
【问题描述】:

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

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

使用下面的sn-p不允许我使用构造函数注入。

public interface ITrackAppService : ITransientDependency

public class TrackAppService : ITrackAppService

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

IocManager.RegisterIfNot<ITrack, Track>();

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

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

【问题讨论】:

  • 在 Application 项目中实现 ITransient 接口的类确实使该类在构造函数依赖注入中工作。也许我应该在依赖注入系统中注册新项目?
  • 你需要DependsOn新项目。

标签: c# aspnetboilerplate abp


【解决方案1】:

如果您将一个接口注入到一个新项目中,那么您不能开箱即用地使用它。因为您的新项目不知道您的依赖项。 每个使用 DI 的新项目都必须设置为 AbpModule

查看示例模块声明。

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

注意类的[DependsOn] 属性。这有助于将项目注册到 DI。

所以你需要做的是,

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多