ASP样板-ITransient如何工作

时间:2019-03-15 02:00:44

标签: c# aspnetboilerplate abp

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

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

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

public interface ITrackAppService : ITransientDependency

public class TrackAppService : ITrackAppService

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

IocManager.RegisterIfNot<ITrack, Track>();

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

注意:我要注入到Application项目中的类在我创建的另一个项目中。

1 个答案:

答案 0 :(得分: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))]属性添加到此新模块。