Hi,
For some reason if I inject one AppService into another, the code will fail to work. However, if I resolve the AppService the code works fine. What's the correct way to go about this?
Streamlined code example below:
public class MyAppService : ApplicationService, IMyAppService
{
private readonly IAnotherAppService _anotherAppService
public MyAppService(IAnotherAppService anotherAppService)
{
_anotherAppService = anotherAppService;
}
public Create(CreateInput input)
{
_anotherAppService.Create(new CreateInputDto {}); // This fails
var AAS = IocManager.Instance.Resolve<AnotherAppService>();
AAS.Create(new CreateInputDto {}); // This works correctly
}
}
4 Answer(s)
-
0
Hi,
Interesting, while I definetely reject injecting one App service into another, I did see it working before. What type of exception are you getting?
-
0
I've managed to inject other AppServices to the same one too, they're all working perfectly. So, for example, in my "MyAppService", I've injected "TaskAppService", and I can call GetTasks() from there. This completes successfully.
I'm not receiving any error at all, the code will not call the function at all. It just skips over it and exits the function.
If you reject the injection method, which route should we go down? Injecting the IIocManager and resolving from there, or resolving as I did in the working example above?
-
0
Hi,
There should be problem with this non-injectable service. Can you share it, at least class definition and ctor. If it's resolving using IIocResolver, then it must be injectable. ABP uses Castle Windows as DI container. Your situation is almost impossible, there should be some wrong here.
-
0
Hi, I've renamed my AppServices/Repositories to be generic, but this is the basics of the code which I'm running.
The problem is bizarre, as, as you can see, I can Create to another app services perfectly fine - There are no problems stepping into the function. It's as if the ComplexAppService isn't being correctly resolved.
I do have it working using IocManager.Instance.Resolve, so it's not a major bug for me currently, just more curiosity.
public class MyAppService : ApplicationService, IMyAppService { private readonly IRepository<Thing> _thingRepository; private readonly IAnotherAppService _anotherAppService private readonly IComplexAppService _complexAppService public MyAppService(IRepository<Thing> thingRepository, IAnotherAppService anotherAppService, IComplexAppService complexAppService) { _thingRepository = thingRepository; _anotherAppService = anotherAppService; _complexAppService = complexAppService; } public Create(CreateInput input) { var ThingItem = _thingRepository.Get(1); ThingItem.Prop = true; // This updates correctly var AnotherId = _anotherAppService.Create(new CreateAnotherInput { Value = "Some text" }); // This will complete _complexAppService.Create(new CreateComplexInput { AnotherId = AnotherId }); // This fails var CAS = IocManager.Instance.Resolve<ComplexAppService>(); CAS.Create(new CreateComplexInput { AnotherId = AnotherId }); // This works correctly } }