2011-06-27 13 views
5

Staramy się używać wczesnych typów powiązań w wtyczce CRM2011. Aby to umożliwić, musimy dodać albo ProxyTypesBeavior(), albo zadzwonić pod numer EnableProxyTypes(). Jednak obie te właściwości dotyczą klasy OrganizationServiceProxy i nie istnieją w interfejsie IOrganizationService.Tworzenie obiektu OrganizationServiceProxy w CRM2011 Wtyczka do używania wczesnego wiązania

Więc jeśli używamy następującego kodu, aby uzyskać usługę organizacji, w jaki sposób mamy uzyskać klasę proxy, aby ustawić powyższe właściwości?

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

Odpowiedz

-2

Zapis tak,

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

proszę wyjaśnić – johannes

+1

To nie jest odpowiedź, to tylko sugestia, aby używać typów jawnych zamiast wywnioskowanych. Jest to preferencja stylistyczna i na pewno nie jest źle używać var! –

3

Dla tych z Was, za pomocą CRM Online, rozwiązanie odbicie nie będzie działać ponieważ utkniesz w trybie piaskownicy.

Dla mnie działało następujące rozwiązanie wykorzystujące interfejs IProxyTypesAssemblyProvider (sugerowany przez 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);