Hello all,
Is it possible to override one of the AbpModule itself ? There are lots of way inside the below link: https://docs.abp.io/en/abp/latest/Dependency-Injection#DependencyInterfaces But none of them are mentioning about overriding or replacing a module itself. For example I want to change AbpBackgroundWorkersModule module's ConfigureServices method inside, how can I do that ? Thank you.
- ABP Framework version: v5.1.1
- UI type: MVC
- DB provider: EF Core
- **Tiered (MVC) : yes
- Exception message and stack trace:
- Steps to reproduce the issue:"
5 Answer(s)
-
0
You don't need to manipulate the original module file also you shouldn't do that.
Module dependencies will be loaded in order. So your module or app will work at the end. So, you can re-configure options that you need to change.
If a module defines an Option you can re-configure it in your module and override settings.
[DependsOn(typeof(OtherModule))] public class YourModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { Configure<OtherModuleOptions>(options => { options.IsEnabled = false; // ... // Just re-configure the module here. }); } }
Replacing Services.
You can use [ExposeServices] [Dependency] with ReplaceServices property as true to replace existing servvices
If you please share what you exactly replace or customize I can say something specific.
-
0
Actually I don't want to change options I want to change for example OnApplicationInitialization method behaviour because of an internal module error . I've also opened the issue related with this topic , you can check the specific case from below link :
https://support.abp.io/QA/Questions/2578/AbpBackgroundWorkersHangfireModule-exception-without-using-hangfire-configuration
But I'll try your module approach. Note => If the issue in the link above will be fixing , we don't even need to change the module.
-
0
There might be a problem with that module, As I see @liangshiwei is checking it.
As an answer of this issue; You can inherit from a module class hat you want to override and add that newly created class in [DependsOn] attribute.
**This is not a recommended way, it's just a way for completely overriding.
public class YourCustomModule : AbpBackgroundWorkersModule { public override void ConfigureServices(ServiceConfigurationContext context) { // Do your stuff here. } }
And add that class in DependsOn attribute instead of AbpBackgroundWorkersModule
[DependsOn(typeof(YourCustomModule))] public class YourAppModule { }
-
0
Thanks , I've already tried this approach but this time no hangfire jobs are registered. So for now I'll be waiting for the other issue solution I think. As a result of this topic , I understand that we shouldn't override a module if there isn't any problem, right ? Thank you.
-
0
Basically, overriding a module means overriding it's service configurations (pre-configurations, configurations, pre-init; post-initialize; whichever you have configured).
You can override but most of the time, you shouldn't need to.
Instead of overriding the whole module, modules should have options that can be configurable from the end application.