首页 > 解决方案 > 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在代码中使用,这使得正确的单元测试几乎是不可能的。

如何注册定制服务?

标签: c#dynamics-365

解决方案


现在,我创建了一个委托IServiceProvider实现,我用它来包装IServiceProvider每个插件调用中的给定。该自定义实现知道我们的服务,并会在询问时创建这些服务。其他一切,它代表。

我试图让委派IServiceProvider速度更快,但我还没有在实时系统中尝试过,所以我不知道它的性能如何。


推荐阅读