private ObjectDescriptor ResolveDynamicObject(DynamicObjectRequest dynamicObjectRequest, DynamicObjectResponse response, ObjectDescriptor objectDescriptor) { var args = new ResolvingBoundObjectArgs(dynamicObjectRequest.Name); try { ResolvingBoundObject?.Invoke(this, args); if (args.Object == null) { return(null); } if (args.Disposable && args.Object is IDisposable) { objectDescriptor = Repository.AddDisposableBinding(dynamicObjectRequest.Name, (IDisposable)args.Object); } else { objectDescriptor = Repository.AddBinding(dynamicObjectRequest.Name, args.Object); } response.Success = true; } catch (Exception e) { Log.ErrorException("ResolveDynamicObject", e); response.Exception = e.Message; } return(objectDescriptor); }
private void OnDyanmicObjectRequest(DynamicObjectRequest dynamicObjectRequest) { var response = new DynamicObjectResponse { ExecutionId = dynamicObjectRequest.ExecutionId }; if (!Repository.TryGetObjectByName(dynamicObjectRequest.Name, out var objectDescriptor)) { objectDescriptor = ResolveDynamicObject(dynamicObjectRequest, response, objectDescriptor); } else { response.Success = true; } response.ObjectDescriptor = objectDescriptor; connection.Send(new RpcRequest <TMarshal> { DynamicObjectResult = response }); }