1

プラグインで使用しているコードは次のようになります。

IOrganizationServiceFactory serviceFactory =
  (IOrganizationServiceFactory)serviceProvider.GetService(
    typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory
  .CreateOrganizationService(Context.UserId);

この構文を使用してサービスを取得するだけでは不十分ではないかと思います。

IOrganizationService service = 
  serviceProvider.GetService(typeof(IOrganizationService));
4

2 に答える 2

4

あなたの質問により、私はプラグインIOrganizationServiceの作成を検討しました。私は自分の生活を楽にするために3つの拡張メソッドを作成しましたが、そのうちの1つはファクトリメソッドを使用し、もう1つは使用しません(プラグイン実行コンテキストでは渡されますが)。これらのメソッドはすべて、しばらくの間本番環境で機能しています。なぜファクトリーサービスを使用するのか、一方の方法では使用しないのか、もう一方の方法では使用しないのかわかりません。

public static IPluginExecutionContext GetContext(this IServiceProvider provider)
{
    return (IPluginExecutionContext) provider.GetService(typeof(IPluginExecutionContext));
}

public static IOrganizationService GetService(this IServiceProvider provider, IPluginExecutionContext context)
{
    return provider.GetService(context, context.UserId);
}

public static IOrganizationService GetService(this IServiceProvider provider, IPluginExecutionContext context, Guid impersonationUser)
{
    var serviceFactory = (IOrganizationServiceFactory)provider.GetService(typeof(IOrganizationServiceFactory));
    return serviceFactory.CreateOrganizationService(impersonationUser);
}

編集

コメント提供者は、2番目のメソッドが3番目のメソッドを呼び出すことを指摘しました。このように、両方のメソッドはファクトリを使用してサービスを作成しています。

于 2013-03-22T12:38:11.300 に答える
1

私はほとんどの場合(すべて)この構文を使用します。

IOrganizationService service = provider.GetService(typeof(IOrganizationService));

ただし、ファクトリアプローチが推奨される場合があります。CRMのSDKがどのように処理するかはわかりませんが、通常、ファクトリはオブジェクトを生成する静的クラスです。そうすれば、プログラミングを楽にする(または混乱させる)機能が(おそらく)増えます。

両方の構文がCRMで機能することは私の理解であり、本当に奇妙なシナリオにぶつからない限り、それはあなたの選択です。

于 2013-03-24T18:11:19.387 に答える