내 확장 방법 해상도에서 예기치 않은 동작이 나타나는 이유를 파악하려고합니다. 나는 Eric Lippert's Closer is Better 기사를 읽었으며 나는 여전히 혼란 스럽다.올바른 확장 메서드 확인 방법
먼저 호출 사이트 : 두 개의 서로 다른 어셈블리에, 나는 두 개의 서로 다른 네임 스페이스에 IOrganziationService에 확장 메서드 오버로드를 정의
// Assembly: Microsoft.Xrm.Sdk
void Delete(string entityName, Guid id);
:
// Assembly: DLaB.Xrm.2016.Tests
using DLaB.Xrm.Entities;
using DLaB.Xrm.Test;
using Microsoft.Xrm.Sdk;
namespace DLaB.Xrm.Tests
public class TrialClass{
{
public void Delete(){
IOrganziationService service = GetService();
Id<Contact> id = GetId();
service.Delete(id); // Call Site in Question
}
}
}
IOrganizationService이 서명으로 삭제 방법을 정의 :
//Assembly: DLaB.Xrm.2016
//Namespace DLaB.Xrm
public static void Delete(this IOrganizationService service, Entity entity) { ... }
public static void Delete(this IOrganizationService service, EntityReference entity) { ... }
//Assembly: DLaB.Xrm.Test.2016
//Namespace DLaB.Xrm.Test
public static void Delete(this IOrganizationService service, Id id) { ... }
public static void Delete<T>(this IOrganizationService service, Id<T> entity) where T : Entity { ... }
나는 또한 가지고있다. 이드의 클래스에 대한 정의 암시 사업자 있다는 Entity
로 변환 또는 내가 정의한 내 암시 사업자에서 이해 EntityReference
The Call Site
service.Delete(id)
shows a compiler error: Error CS0121 The call is ambiguous between the following methods or properties: 'Extensions.Delete(IOrganizationService, Entity)' and 'Extensions.Delete(IOrganizationService, EntityReference)'
. 필자가 이해하지 못하는 것은 DLaB.Xrm
네임 스페이스가 DLaB.Xrm.Test
네임 스페이스보다 더 가까운 이유입니다. 사용 지시문을 사용하지 않아도됩니다.