据我了解,在abp中,当类实现ITransient接口时,它会自动在依赖项注入系统中注册。
当我在ASPNetZero中创建一个新项目并且一个类实现了ITransient时,我无法将该类注入其他项目中,例如Application
使用以下代码段不允许我使用构造函数注入。
public interface ITrackAppService : ITransientDependency
public class TrackAppService : ITrackAppService
但是当我注册它时(即使该类未实现ITransient),也可以使用构造函数注入。
IocManager.RegisterIfNot<ITrack, Track>();
我是否误解了ITransient的工作原理? 如何使用Itransient,以便可以使用构造函数依赖项注入?
注意:我要注入到Application项目中的类在我创建的另一个项目中。
答案 0 :(得分:0)
如果要为新项目注入接口,则不能开箱即用。因为您的新项目不知道您的依赖关系。
每个使用DI的新项目都必须设置为AbpModule
。
请参阅示例模块声明。
[DependsOn(typeof(MyBlogCoreModule))]
public class MyBlogApplicationModule : AbpModule
{
public override void Initialize()
{
IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
}
}
找出类上的[DependsOn]
属性。这有助于将项目注册到DI。
所以您需要做的是
[DependsOn(typeof(YourApplicationServiceModule))]
属性添加到此新模块。