c# - D365 中来自 IServiceProvider 的自定义服务
问题描述
我们最近开始使用 D365 构建应用程序。这是从我们使用 spring 进行依赖注入的 java 的转变。似乎IServiceProvider
确实依赖注入,但我还没有找到任何方法让它与我们的本土服务一起工作。
我们的代码如下所示:
public void Execute(IServiceProvider serviceProvider)
{
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = factory.CreateOrganizationService(context.UserId);
// ... do stuff ...
}
我想添加以下行:
MyHomeGrownService myHomeGrownService = (MyHomeGrownService )serviceProvider.GetService(typeof(MyHomeGrownService));
但是,我不知道如何注册MyHomeGrownService
;我也没有找到很多关于这个主题的文档。
如果没有正确的依赖注入,开发人员不得不new
在代码中使用,这使得正确的单元测试几乎是不可能的。
如何注册定制服务?
解决方案
现在,我创建了一个委托IServiceProvider
实现,我用它来包装IServiceProvider
每个插件调用中的给定。该自定义实现知道我们的服务,并会在询问时创建这些服务。其他一切,它代表。
我试图让委派IServiceProvider
速度更快,但我还没有在实时系统中尝试过,所以我不知道它的性能如何。
推荐阅读
- ios - 从 swift 5 的 web 视图中打开麦克风
- python - 如何使用 sklearn KNearest neighbors 获得 1:1 对应匹配
- vue.js - 尝试在引导程序 vue 中预先检查复选框
- javascript - 使用 Node 和 Express 将数据发布到外部 API 的问题
- java - Java类依赖,如何“导入”在文件系统中找到类
- python - 在 Python 中使用 mininet 时,Wireshark 未捕获数据包
- stm32 - STM32 FreeRTOS - UART延迟中断问题
- brightway - 导入brightway2时出现ImportError
- c# - 从存储库获取实体对象时如何设置它的 ID
- python - 如何为我的根文件夹的名称禁用 pylint?