public override DomainServiceDescription GetDescription() { DomainServiceDescription description = base.GetDescription(); // get all type-level attributes description.Attributes = ReflectionDomainServiceDescriptionProvider.GetDomainServiceTypeAttributes(description.DomainServiceType); // get all public candidate methods and create the operations List <ReflectionDomainOperationEntry> operationEntries = new List <ReflectionDomainOperationEntry>(); IEnumerable <MethodInfo> methodsToInspect = description.DomainServiceType.GetMethods(BindingFlags.Instance | BindingFlags.Public) .Where(p => (p.DeclaringType != typeof(DomainService) && (p.DeclaringType != typeof(object))) && !p.IsSpecialName); foreach (MethodInfo method in methodsToInspect) { // We need to ensure the buddy metadata provider is registered before we // attempt to do convention, since we rely on IsEntity which relies on // KeyAttributes being present RegisterAssociatedMetadataProvider(method); if (method.GetCustomAttributes(typeof(IgnoreAttribute), false).Length > 0) { continue; } if (method.IsVirtual && method.GetBaseDefinition().DeclaringType == typeof(DomainService)) { // don't want to infer overrides of DomainService virtual methods as // operations continue; } ReflectionDomainOperationEntry operation = new ReflectionDomainOperationEntry(description.DomainServiceType, method, (DomainOperation)(-1)); if (this.ClassifyDomainOperation(operation)) { operationEntries.Add(operation); } } foreach (DomainOperationEntry operation in operationEntries) { description.AddOperation(operation); } return(description); }