ABP Framework跨项目调用DocumentService依赖注入异常求助
问题分析
核心问题是跨项目调用时,Patient项目的PatientDocumentService依赖的仓储未被Platform宿主正确注册,ABP的仓储默认通过模块自动注册,跨项目引用时需确保依赖模块被正确加载。
解决方案步骤
添加依赖模块到Platform宿主
PatientDocumentService依赖DropdownManagement模块(对应DocumentType仓储),需在Platform宿主的模块类中显式引入相关模块:[DependsOn( typeof(PatientManagementModule), typeof(DropdownManagementModule) )] public class PlatformHostModule : AbpModule { // 模块其他逻辑 }确认
DropdownManagementModule继承自AbpModule,ABP会自动注册该模块下实体对应的仓储。用抽象接口封装服务,解耦跨项目依赖
在共享类库(如RCM.Shared)定义抽象接口:public interface IPatientDocumentService : IApplicationService { // 定义需要调用的业务方法 Task<DocumentDto> GetDocumentAsync(Guid id); }在Patient项目中让
PatientDocumentService实现该接口:public class PatientDocumentService : ApplicationService, IPatientDocumentService { private readonly IRepository<DocumentType, Guid> _documentTypeRepository; public PatientDocumentService(IRepository<DocumentType, Guid> documentTypeRepository) { _documentTypeRepository = documentTypeRepository; } public async Task<DocumentDto> GetDocumentAsync(Guid id) { // 业务逻辑实现 } }Platform项目仅引用共享类库,通过注入
IPatientDocumentService完成调用,避免直接依赖实现类。确认服务注册有效性
若接口未被自动注册,在Patient项目的模块中手动注册:public class PatientManagementModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.AddTransient<IPatientDocumentService, PatientDocumentService>(); } }验证实体可见性与配置
确保DocumentType实体为public访问级别,且DropdownManagementModule中已正确配置该实体(如通过实体配置类),ABP才能自动生成并注册对应的仓储。
内容的提问来源于stack exchange,提问作者Harish
相关产品推荐
相关产品推荐

