Open Closed

DependencyResolutionException in Units tests #289


User avatar
0
Repunjay created

Hi,

I'm trying to log ABP Audit Log info to AWS CloudWatch using ticket response - https://support.abp.io/QA/Questions/218

[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(IAuditingStore))]
public class CustomAuditingStore : AuditingStore
{
    private readonly LogEventBatch _repo = new LogEventBatch();
    private readonly IAmazonCloudWatchLogs _client;
    private int _requestCount = 5;
    private static readonly Regex InvalidSequenceTokenRegex = new
    Regex(@"The given sequenceToken is invalid. The next expected sequenceToken is: (\d+)");


    public CustomAuditingStore(
    IAuditLogRepository auditLogRepository,
    IGuidGenerator guidGenerator,
    IUnitOfWorkManager unitOfWorkManager,
    IOptions<AbpAuditingOptions> options)
    : base(auditLogRepository, guidGenerator, unitOfWorkManager, options)
    {
        _client = CloudWatchLog.GetClient();
    }

The class CustomAuditStore seems to work just fine in my POC code but when I added it to my main Application project and when I run unit tests, it gives me below error -

Autofac.Core.DependencyResolutionException : An exception was thrown while activating Volo.Abp.EntityFrameworkCore.EntityHistory.EntityHistoryHelper -> ProfileManagement.CustomAuditingStore.
---- Autofac.Core.DependencyResolutionException : None of the constructors found with 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' on type 'ProfileManagement.CustomAuditingStore' can be invoked with the available services and parameters:
Cannot resolve parameter 'Volo.Abp.AuditLogging.IAuditLogRepository auditLogRepository' of constructor 'Void .ctor(Volo.Abp.AuditLogging.IAuditLogRepository, Volo.Abp.Guids.IGuidGenerator, Volo.Abp.Uow.IUnitOfWorkManager, Microsoft.Extensions.Options.IOptions`1[Volo.Abp.Auditing.AbpAuditingOptions])'.

Could you please help and advise?


3 Answer(s)
  • User Avatar
    0
    liangshiwei created
    Support Team Fullstack Developer

    Hi,

    Can you provide steps and share some unit tests code? Thanks.

  • User Avatar
    0
    Repunjay created

    Hi,

    Please find below code snippet for one of unit test class. Let me know if need further information.

    public class SupplierRegistrationServiceTests : ProfileManagementApplicationTestBase
        {
            private readonly ISupplierRegistrationAppService _supplierRegistrationAppService;
            private readonly ISupplierRegistrationRepository _supplierRegistrationRepository;
            private readonly ISupplierRepository _supplierRepository;
            private readonly ISupplierCodeRepository _supplierCodeRepository;
            private readonly IBusinessEntityRepository _businessEntityRepository;
            private readonly ISupplierUserProfileRepository _supplierUserProfileRepository;
    
            public SupplierRegistrationServiceTests()
            {
                _supplierRegistrationAppService = GetRequiredService<ISupplierRegistrationAppService>();
                _supplierRegistrationRepository = GetRequiredService<ISupplierRegistrationRepository>();
                _supplierRepository = GetRequiredService<ISupplierRepository>();
                _supplierCodeRepository = GetRequiredService<ISupplierCodeRepository>();
                _businessEntityRepository = GetRequiredService<IBusinessEntityRepository>();
                _supplierUserProfileRepository = GetRequiredService<ISupplierUserProfileRepository>();
            }
    
    
            [Fact]
            public async Task RegisterAsync()
            {
    
                var supplierCodeList = new List<SupplierCodeCreateDto>
                {
                    new SupplierCodeCreateDto
                    {
                        Code = "24865",
                        IsPrimary = true,
                        SupplierId = Guid.Parse("99255F1D-9A43-4523-A499-96839ABFD423")
                    },
                    new SupplierCodeCreateDto
                    {
                        Code = "17596",
                        IsPrimary = false,
                        SupplierId = Guid.Parse("99255F1D-9A43-4523-A499-96839ABFD423")
                    }
                };
    
    
                var supplierCreateDto = new SupplierCreateDto
                {
                    Name = "Microsoft",
                    BusinessEntityId = Guid.Parse("231c8aac-3355-4c8b-84d7-eabb4ceba041"),
                    SupplierCodes = supplierCodeList
                };
    
                var supplierUserProfileCreateDto = new SupplierUserProfileCreateDto
                {
                    FirstName = "Bill",
                    LastName = "Gate",
                    Email = "Bill.Gate@yahoo.com",
                    Designation = "Executive",
                    PhoneNumber = "99999999",
                    IsAdmin = false,
                    IsPrimary = true,
                    CallingCountryCode = "91",
                    PhoneType = PhoneType.Mobile
                };
    
                var supplierRegistration = new SupplierRegistrationCreateDto
                {
                    FinancingModelId = 1,//Need to change later
                    TermsAndConditions = true,
                    TermsAndConditionsTime = DateTime.Now.Date,
                    Supplier = supplierCreateDto
                };
    
                var input = new SupplierRegistrationProcessDto
                {
                    SupplierRegistration = supplierRegistration,
                    SupplierUserProfile = supplierUserProfileCreateDto
                };
    
                // Act
                var serviceResult = await _supplierRegistrationAppService.RegisterAsync(input);
    
                // Assert
                var result = await _supplierRegistrationRepository.FindAsync(c => c.Id == serviceResult.Id);
    
                result.ShouldNotBe(null);
    
                // Assert
                var supplierResult = await _supplierRepository.FindAsync(c => c.Id == result.SupplierId);
    
                supplierResult.ShouldNotBe(null);
                supplierResult.Name.ShouldBe("Microsoft");
                supplierResult.BusinessEntityId.ShouldBe(Guid.Parse("231c8aac-3355-4c8b-84d7-eabb4ceba041"));
    
            }
    
        Also, below is the error - 
        
        
        SCV.Litmus.ProfileManagement.SupplierRegistrations.SupplierRegistrationServiceTests.RegisterAsync
    

    Source: SupplierRegistrationApplicationTests.cs line 37
    Duration: 1 ms

    Message:
    Autofac.Core.DependencyResolutionException : An exception was thrown while activating Volo.Abp.EntityFrameworkCore.EntityHistory.EntityHistoryHelper -> SCV.Litmus.ProfileManagement.CustomAuditingStore.
    ---- Autofac.Core.DependencyResolutionException : None of the constructors found with 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' on type 'SCV.Litmus.ProfileManagement.CustomAuditingStore' can be invoked with the available services and parameters:
    Cannot resolve parameter 'Volo.Abp.AuditLogging.IAuditLogRepository auditLogRepository' of constructor 'Void .ctor(Volo.Abp.AuditLogging.IAuditLogRepository, Volo.Abp.Guids.IGuidGenerator, Volo.Abp.Uow.IUnitOfWorkManager, Microsoft.Extensions.Options.IOptions1[Volo.Abp.Auditing.AbpAuditingOptions])'. Stack Trace: InstanceLookup.Activate(IEnumerable1 parameters, Object& decoratorTarget)
    InstanceLookup.Execute()
    ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, IComponentRegistration registration, IEnumerable1 parameters) InstanceLookup.ResolveComponent(IComponentRegistration registration, IEnumerable1 parameters)
    ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable1 parameters, Object& instance) AutowiringPropertyInjector.InjectProperties(IComponentContext context, Object instance, IPropertySelector propertySelector, IEnumerable1 parameters)
    <>c__DisplayClass34_0.<PropertiesAutowired>b__1(Object s, ActivatingEventArgs1 e) ComponentRegistration.RaiseActivating(IComponentContext context, IEnumerable1 parameters, Object& instance)
    InstanceLookup.Activate(IEnumerable1 parameters, Object& decoratorTarget) InstanceLookup.Execute() ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, IComponentRegistration registration, IEnumerable1 parameters)
    ResolveOperation.ResolveComponent(IComponentRegistration registration, IEnumerable1 parameters) ResolveOperation.Execute(IComponentRegistration registration, IEnumerable1 parameters)
    LifetimeScope.ResolveComponent(IComponentRegistration registration, IEnumerable1 parameters) ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable1 parameters, Object& instance)
    ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable1 parameters) ResolutionExtensions.Resolve(IComponentContext context, Type serviceType, IEnumerable1 parameters)
    ResolutionExtensions.Resolve(IComponentContext context, Type serviceType)
    AutofacServiceProvider.GetRequiredService(Type serviceType)
    ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
    ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
    UnitOfWorkDbContextProvider1.CreateDbContextWithTransaction(IUnitOfWork unitOfWork) UnitOfWorkDbContextProvider1.CreateDbContext(IUnitOfWork unitOfWork)
    UnitOfWorkDbContextProvider1.CreateDbContext(IUnitOfWork unitOfWork, String connectionStringName, String connectionString) <>c__DisplayClass3_0.<GetDbContext>b__0() <>c__DisplayClass6_02.<GetOrAdd>b__0(TKey k)
    AbpDictionaryExtensions.GetOrAdd[TKey,TValue](IDictionary2 dictionary, TKey key, Func2 factory)
    AbpDictionaryExtensions.GetOrAdd[TKey,TValue](IDictionary2 dictionary, TKey key, Func1 factory)
    UnitOfWork.GetOrAddDatabaseApi(String key, Func1 factory) UnitOfWorkDbContextProvider1.GetDbContext()
    EfCoreRepository2.get_DbContext() EfCoreRepository2.get_DbSet()
    EfCoreRepository2.InsertAsync(TEntity entity, Boolean autoSave, CancellationToken cancellationToken) AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync()
    UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
    CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed)
    SupplierCodeDataSeedContributor.SeedAsync(DataSeedContext context) line 21
    DataSeeder.SeedAsync(DataSeedContext context)
    AsyncInterceptorBase.ProceedAsynchronous(IInvocation invocation, IInvocationProceedInfo proceedInfo)
    CastleAbpMethodInvocationAdapter.ProceedAsync()
    UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
    CastleAsyncAbpInterceptorAdapter1.InterceptAsync(IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed)
    <<SeedTestData>b__0>d.MoveNext() line 35
    --- End of stack trace from previous location where exception was thrown ---
    TaskExtensions.WaitAndUnwrapException(Task task)
    <>c__DisplayClass15_0.<Run>b__0(Task t)
    ContinuationTaskFromTask.InnerInvoke()
    <.cctor>b__274_0(Object obj)
    ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
    --- End of stack trace from previous location where exception was thrown ---
    ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
    Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
    --- End of stack trace from previous location where exception was thrown ---
    TaskExtensions.WaitAndUnwrapException(Task task)
    AsyncContext.Run(Func1 action) AsyncHelper.RunSync(Func1 action)
    ProfileManagementTestBaseModule.SeedTestData(ApplicationInitializationContext context) line 31
    ProfileManagementTestBaseModule.OnApplicationInitialization(ApplicationInitializationContext context) line 26
    OnApplicationInitializationModuleLifecycleContributor.Initialize(ApplicationInitializationContext context, IAbpModule module)
    ModuleManager.InitializeModules(ApplicationInitializationContext context)
    AbpApplicationBase.InitializeModules()
    AbpApplicationWithExternalServiceProvider.Initialize(IServiceProvider serviceProvider)
    AbpIntegratedTest1.ctor() ProfileManagementTestBase1.ctor()
    ProfileManagementApplicationTestBase.ctor()
    SupplierRegistrationServiceTests.ctor() line 25
    ----- Inner Stack Trace -----
    ReflectionActivator.GetValidConstructorBindings(IComponentContext context, IEnumerable1 parameters) ReflectionActivator.ActivateInstance(IComponentContext context, IEnumerable1 parameters)
    InstanceLookup.Activate(IEnumerable`1 parameters, Object& decoratorTarget)

  • User Avatar
    0
    liangshiwei created
    Support Team Fullstack Developer

    I can't reproduce your problem. Could your use CLI to create a free template to reproduce this problem? thanks.

Boost Your Development
ABP Live Training
Packages
See Trainings
Mastering ABP Framework Book
Do you need assistance from an ABP expert?
Schedule a Meeting
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v9.2.0-preview. Updated on March 25, 2025, 11:10