来自服务提供商的ABP独立为<TEntity>空



我有一个控制台应用程序,取决于不同的项目(我使用DependsOn()

[DependsOn(
typeof(AbpAutofacModule),
typeof(SecondProjectModule),
// Other dependencies
)]
public class MyConsoleAppModule...

然后,我的控制台应用程序在第二个项目中调用一个方法,在那里我尝试使用服务提供商获得一个IRepository,如下所示:

using (var scope = SecondProjectModule.GetScope())
{
using (var uow = scope.ServiceProvider.GetService<IUnitOfWorkManager>().Begin())
{
var repo = scope.ServiceProvider.GetService<IReadOnlyRepository<MyEntity>>();
return ... // LINQ here
}
}

但是repo是空的null用于DbContext和其他属性。如果我用我的WebApp项目调用这个方法,它会完美地运行。

在SecondProjectModule中的GetScope()方法非常简单:

public static IServiceScope GetScope(IServiceProvider serviceProvider = null)
{
var provider = serviceProvider ?? _serviceProvider;
return provider?
.GetRequiredService<IHybridServiceScopeFactory>()
.CreateScope();
}

不确定问题在哪里,因为我的ConsoleApp项目的依赖关系似乎很好。

存储库的实现位于EfCoreMongoDB第二个模块的图层

Web应用工作得很好,因为它依赖于数据库集成层(EfCore或MongoDB),其中包含存储库的实现。

假设你的SecondProjectModule是一个应用服务,你需要一个引用,并依赖于该模块(EfCore或MongoDB)的数据库集成层。

你可以查看有关分层的文档,并注意到应用服务没有任何依赖于EfCore或MongoDB。

相关内容

最新更新