问题的提出
我们需要在现有系统中使用ABP模块,在启动时,只要在现有系统的Global中使用AbpBootStrapper进行初始化,就可以使用ABP模块。比如:
using (var bootstrapper = Abp.AbpBootstrapper.Create<PoemGame.WebApi.PoemGameWebApiModule>())
{
bootstrapper.Initialize();
}
这样似乎可以了,Abp模块相关的动态Web Api可以访问。但如果访问现有系统,会发现,现有系统的Web Api无法使用了。
问题的原因
进一步研究发现,当Abp模块启动后,所有控制器的访问都需要通过Abp的依赖注入机制,而现有系统的Web Api没有在Abp的容器中注册,因此会出现问题。
解决办法
我们可以bootstrapper初始化之后,注册现有的web api控制器,这样,就可以访问了。比如:
using (var bootstrapper = Abp.AbpBootstrapper.Create<PoemGame.WebApi.PoemGameWebApiModule>())
{
bootstrapper.Initialize();
bootstrapper.IocManager.Register(typeof(PlatWebApi.Controllers.ValuesController));
bootstrapper.IocManager.Register(typeof(PlatWebApi.Controllers.AccountController));
}