I am trying to call a Domain service from integration test cases, so I create teamManager object using GetRequiredService() : _teamManager = GetRequiredService();
by this I am able to access methods inside TeamManager and inside Teammanager protected
IRepository<Team,int> _teamRepository { get; set; }
var existingTeams = await _teamRepository.GetListAsync(e => e.Name == team.Name);
It all works fine, But when I call that from a console application
using (var application = AbpApplicationFactory.Create<SecurityInfrastructureModule>())
{
application.Initialize();
var bgService = application.Services.GetRequiredService<TeamRolePermissionSyncImpl>();
bgService.SyncTeamRolePermissionAsync().ConfigureAwait(false);
AbpEntityOptions = await _teamManager.CreateFunctionalTeamAsync(newTeamEntity);
Inside the SyncTeamRolePermissionAsync()
method I am calling TeamManager method but it is giving below error:
at Volo.Abp.Domain.Repositories.BasicRepositoryBase`1.get_CurrentTenant()
at Volo.Abp.Domain.Repositories.EntityFrameworkCore.EfCoreRepository`2.GetDbContextAsync()
at Volo.Abp.Domain.Repositories.EntityFrameworkCore.EfCoreRepository`2.<GetDbSetAsync>d__10.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
at Volo.Abp.Domain.Repositories.EntityFrameworkCore.EfCoreRepository`2.<GetListAsync>d__27.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
at Security.TeamManager.<ValidateIsTeamDuplicateAsync>d__41.MoveNext() in
-----------------------------------------------------------
System.NullReferenceException: 'Object reference not set to an instance of an object.'.
How to make sure that IRepository<Entity, int> is injected successfully.
Constructor of TeamManager is as below:
public TeamManager(
IRepository<Team, int> teamRepository,
IRepository<TeamRole, int> teamRoleRepository,
IRepository<UserRole> userRoleRepository,
IRoleDefinitionContext roleDefinitionContext,
ITeamRoleTeamplateDefinitionContext roleTeamplateDefinitionContext,
IUnitOfWorkManager unitOfWorkManager,
ISecurityTeamRepository securityTeamRepository
)
{
_teamRepository = teamRepository;
_teamRoleRepository = teamRoleRepository;
_userRoleRepository = userRoleRepository;
_roleDefinitionContext = roleDefinitionContext;
_teamRoleTemplateDefinitionContext = roleTeamplateDefinitionContext;
_unitOfWorkManager = unitOfWorkManager;
_securityTeamRepository = securityTeamRepository;
}
My ABP Module configuration:
[DependsOn(
typeof(AbpDddDomainModule),
typeof(AbpUsersDomainModule),
typeof(AbpIdentityDomainModule),
typeof(SecurityDomainModule),
typeof(AbpEntityFrameworkCoreModule),
typeof(AbpIdentityEntityFrameworkCoreModule),
typeof(AbpPermissionManagementEntityFrameworkCoreModule)
)]
public class SecurityInfrastructureModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddScoped<ISecuritySourceRoleService, EFCoreSourceRoleRepository>();
context.Services.AddScoped<ISecurityTeamRepository, EFCoreSecurityTeamRepository>();
context.Services.AddScoped<ISecurityDbContext, SecurityDbContext>();
context.Services.AddAbpDbContext<SecurityDbContext>();
context.Services.AddAbpDbContext<SecurityDbContext>(options =>
{
options.AddDefaultRepositories(includeAllEntities: true);
});
//context.Services.AddAbpDbContext<TRPSync.PRSDBContext>(options =>
//{
// options.AddDefaultRepositories(includeAllEntities: true);
//});
context.Services.AddDbContext<TRPSync.PRSDBContext>();
} }