我们正在尝试在CRM2011插件中使用早期绑定类型。要启用此功能,我们需要添加ProxyTypesBeavior()
或致电EnableProxyTypes()
。但是,这两个属性都适用于OrganizationServiceProxy
类,而IOrganizationService
接口上不存在。
因此,如果我们使用以下代码来获取组织服务,我们如何获取代理类来设置上述属性?
var serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
var service = serviceFactory.CreateOrganizationService(context.UserId);
答案 0 :(得分:3)
对于那些使用CRM Online的人来说,反射解决方案将不起作用,因为你陷入了沙箱模式。
以下使用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);
答案 1 :(得分:2)
此线程上的Guil提供了一个选项,可以使用反射将代码gen代理类型绑定到服务工厂。它对我有用。无法在沙盒中注册它,因为反射需要完全信任。
factory.GetType().GetProperty("ProxyTypesAssembly").SetValue(factory, typeof(YourCrmContext).Assembly, null);
http://social.microsoft.com/Forums/en-US/crmdevelopment/thread/bc7e93d4-1b36-4e21-9449-f51b67a2e52c/
答案 2 :(得分:-2)
像这样写,
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);