I am using IBlobContainer with Azure Blob Storage to save files. When I enabled multi-tenant files are keeping inside the tenant folder perfectly. My question is how can I create a new folder and place the files inside tenant folder and get that files from that folder?
this is the current path files/tenants/{tenant_id}/{file_name}
I want to place it like files/tenants/{tenant_id}/{my_custom_folder}/{file_name}
I managed to Implement IDistributedEventHandler inside BookManager class. Now it is working..
Ok, I will make a small sample and share it with you. One more thing I noticed, I created a new Class inherited from ApplicationService and implemented IDistributedEventHandler, and paste all coding, which is working fine.
The main difference between the two classes is One is inherited from DomainService and The Other is ApplicationService. If you have any clue just check.
public class BookManager : DomainService
Inside this class code is throwing exception
public class BookAppDistEventService : ApplicationService, IDistributedEventHandler<APIBookEto>
Inside this class code is working fine.
Yes, It is passing through but the exception is thrown again where DBContext is accessing.
at Microsoft.EntityFrameworkCore.DbContext.CheckDisposed()
at Microsoft.EntityFrameworkCore.DbContext.get_ContextServices()
at Microsoft.EntityFrameworkCore.DbContext.get_Model()
at Microsoft.EntityFrameworkCore.Internal.InternalDbSet1.get_EntityType() at Microsoft.EntityFrameworkCore.Internal.InternalDbSet
1.CheckState()
at Microsoft.EntityFrameworkCore.Internal.InternalDbSet1.get_EntityQueryable() at Microsoft.EntityFrameworkCore.Internal.InternalDbSet
1.System.Linq.IQueryable.get_Provider()
at System.Linq.Queryable.Where[TSource](IQueryable1 source, Expression
1 predicate)
at Akadimi.Books.BookManager.<SetBookAuthorsAsync>d__9.MoveNext() in D:\Akadimi\Akadimi\aspnet-core\src\Akadimi.Domain\Books\BookManager.cs:line 123
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.TaskAwaiter.GetResult()
at Akadimi.Books.BookManager.<CreateAsync>d__7.MoveNext() in D:\Akadimi\Akadimi\aspnet-core\src\Akadimi.Domain\Books\BookManager.cs:line 63
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.TaskAwaiter`1.GetResult()
at Akadimi.Books.BooksAppService.
public class BooksAppService: ApplicationService, IBooksAppService, IDistributedEventHandler<APIBookEto>
{
private readonly BookManager _bookManager;
public BooksAppService(BookManager bookManager)
{
_bookRepository = bookRepository;
_bookManager = bookManager;
}
public virtual async Task<BookDto> CreateAsync(BookCreateDto input)
{
var titles = ObjectMapper.Map<List<BookTranslationCreateDto>, List<BookTranslation>>(input.inputTitles);
var book = await _bookManager.CreateAsync(
input.NoOfPages, input.Dimensions, input.ISBN10, input.ISBN13, input.Price, input.PublishDate,
titles, input.BookLanguageId, input.BookMediaTypeId, input.AuthorIds, input.PublisherIds, input.TagIds, input.FileId
);
return ObjectMapper.Map<Book, BookDto>(book);
}
[UnitOfWork]
public virtual Task HandleEventAsync(APIBookEto eventData)
{
Task.Run(async () =>
{
try
{
var input = ObjectMapper.Map<APIBookEto, BookCreateDto>(eventData);
var titles = ObjectMapper.Map<List<BookTranslationCreateDto>, List<BookTranslation>>(input.inputTitles);
var book = await _bookManager.CreateAsync(
input.NoOfPages, input.Dimensions, input.ISBN10, input.ISBN13, input.Price, input.PublishDate,
titles, input.BookLanguageId, input.BookMediaTypeId, input.AuthorIds, input.PublisherIds, input.TagIds, input.FileId
);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
});
return Task.CompletedTask;
}
}
I can explain the scenario. Here above you can see inside BooksAppService class I have a CreateAsync which is basically inserts data into the database. I have already written all logic inside _bookManager.CreateAsync() function. As you can see I am listening distributed event HandleEventAsync, inside this event function I am executing the same logic which is written in CreateAsync. CreateAsync method is calling through API controller which is perfectly working fine and HandleEventAsync(this is already marked as [UnitOfWork]) is calling through RabbitMq and is throwing the above exceptions.
at Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(ResolveRequest request)
at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable1 parameters, Object& instance) at Autofac.ResolutionExtensions.ResolveOptionalService(IComponentContext context, Service service, IEnumerable
1 parameters)
at Volo.Abp.DependencyInjection.AbpLazyServiceProvider.<>c__DisplayClass12_0.<LazyGetService>b__0()
at Volo.Abp.DependencyInjection.AbpLazyServiceProvider.LazyGetService(Type serviceType)
at Volo.Abp.DependencyInjection.AbpLazyServiceProvider.LazyGetService(Type serviceType, Object defaultValue)
at Volo.Abp.DependencyInjection.AbpLazyServiceProvider.LazyGetService[T](T defaultValue)
at Volo.Abp.Application.Services.ApplicationService.get_GuidGenerator()
at Akadimi.Books.BookAppDistEventService.<CreateAsync>d__8.MoveNext() in D:\Akadimi\Akadimi\aspnet-core\src\Akadimi.Application\Books\BookAppDistEventService.cs:line 79
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.TaskAwaiter`1.GetResult()
at Akadimi.Books.BookAppDistEventService.<>c__DisplayClass7_0.<
ABP Framework version: v5.2.0
UI type: Angular
DB provider: EF Core
Tiered (MVC) or Identity Server Separated (Angular): yes
Exception message and stack trace:
Steps to reproduce the issue:"
I have implemented RabbitMq in my application, I am getting an exception inside HandleEventAsync when trying to access application service implemented class method. I tried to implement [UnitOfWork], but still, I am getting exceptions.
Yes it is working ..