2011-06-27 10 views
5

CRM2011プラグインで初期バインドタイプを使用しようとしています。これを有効にするには、ProxyTypesBeavior()を追加するか、EnableProxyTypes()に電話する必要があります。ただし、これらのプロパティはどちらもOrganizationServiceProxyクラスに適用され、IOrganizationServiceインターフェイスには存在しません。CRM2011プラグインでOrganizationServiceProxyを作成する早期バインディングを使用する

組織サービスを取得するために次のコードを使用している場合、上記のプロパティを設定するためのプロキシクラスを取得する方法を教えてください。このような

var serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); 
var service = serviceFactory.CreateOrganizationService(context.UserId); 

答えて

-2

書き込み、このスレッドに

IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); 
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); 
+0

説明してください – johannes

+1

これは答えではなく、推論型ではなく明示型を使用することを推奨しています。これは文体的な好みであり、varを使うのは間違いではありません! –

2

Guilは、サービス工場へのコード生成プロキシタイプをバインドするためにリフレクションを使用するオプションを提供しました。そしてそれは私のために働いた。リフレクションは完全な信頼を必要とするため、サンドボックスに登録することはできません。あなたはサンドボックスモードで立ち往生しているので、

factory.GetType().GetProperty("ProxyTypesAssembly").SetValue(factory, typeof(YourCrmContext).Assembly, null); 
CRM Onlineを使用してあなたのそれらのために

http://social.microsoft.com/Forums/en-US/crmdevelopment/thread/bc7e93d4-1b36-4e21-9449-f51b67a2e52c/

3

は、反射解決策は機能しません。

IProxyTypesAssemblyProviderインターフェイス(Pavel Korsukovが提案)を使用した次のソリューションは私のために働いた(source)。

var factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); 

var proxyTypesProvider = factory as IProxyTypesAssemblyProvider; 
if (proxyTypesProvider != null) 
{ 
    proxyTypesProvider.ProxyTypesAssembly = typeof(Xrm.XrmServiceContext).Assembly; 
} 
// Use the factory to generate the Organization Service. 
var service = factory.CreateOrganizationService(context.UserId); 
関連する問題