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。
所以你需要做的是,
- 像我上面展示的那样在新项目中创建一个新的 class。
- 将
[DependsOn(typeof(YourApplicationServiceModule))]
属性添加到这个新模块。
据我了解,在 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。
所以你需要做的是,
- 像我上面展示的那样在新项目中创建一个新的 class。
- 将
[DependsOn(typeof(YourApplicationServiceModule))]
属性添加到这个新模块。