public override object GetValue(object obj, IDictionary <string, IExtendedResourceProxy> cache) { IExtendedResourceProxy extendedResource; var underlyingResource = UnderlyingProperty.GetValue(obj, null); if (TryGetFromCache(cache, underlyingResource, out extendedResource)) { return(extendedResource); } if (underlyingResource != null) { extendedResource = (IExtendedResourceProxy) RuntimeProxyFactory.Create(typeof(ExtendedResourceBase), Property.PropertyType); var proxyBase = (ExtendedResourceBase)extendedResource; proxyBase.Initialize(ClientTypeResolver.Default, Info, underlyingResource); } else { extendedResource = null; } cache[Property.Name] = extendedResource; return(extendedResource); }
public void GenerateProxy_ForInterface_CopiesVersionFromProxiedTypeToAssembly() { var proxy = RuntimeProxyFactory <RedirectProxy, ITakesNothingReturnsInt> .Create(); var version = proxy.GetType().Assembly.GetName().Version; Assert.That(version, Is.EqualTo(typeof(ITakesNothingReturnsInt).Assembly.GetName().Version)); }
public void GenerateProxy_ForInterfaceImplementingMethodWithMatchingMethodInProxyBase_DoesNotGenerateMethod() { var proxy = RuntimeProxyFactory <RedirectProxy, IHasMethodWithSameSignatureAsProxy> .Create(); var redirectProxy = ((RedirectProxy)(proxy)); Assert.That(proxy.TheCrazyMethod(true), Is.EqualTo(12345678)); Assert.That(redirectProxy.CrazyMethodWasCalled); }
protected virtual TPropType OnGetRepository <TOwner, TPropType, TResource, TPostResponseType, TId>( PropertyWrapper <TOwner, TPropType> property) where TPropType : IClientRepository where TResource : class, IClientResource where TPostResponseType : IClientResource { var mockedRepo = RuntimeProxyFactory <MockedRepository <TResource, TPostResponseType, TId>, TPropType> .Create(); ((MockedRepository <TResource, TPostResponseType, TId>)((object)mockedRepo)).Client = this; return(mockedRepo); }
private object CreateClientSideResourceProxy(ExtendedResourceInfo userTypeInfo, object wrappedResource) { #if DISABLE_PROXY_GENERATION throw new NotSupportedException("Proxy generation has been disabled compile-time using DISABLE_PROXY_GENERATION, which makes this method not supported."); #else var proxy = (ExtendedResourceBase) RuntimeProxyFactory.Create(typeof(ExtendedResourceBase <>).MakeGenericType(userTypeInfo.ServerType), userTypeInfo.ExtendedType); proxy.Initialize(this.clientTypeResolver, userTypeInfo, wrappedResource); return(proxy); #endif }
public object WrapForm(object serverPatchForm, Type extendedType) { #if DISABLE_PROXY_GENERATION throw new NotSupportedException("Proxy generation has been disabled compile-time using DISABLE_PROXY_GENERATION, which makes this method not supported."); #else var info = GetExtendedResourceInfo(extendedType); var userPostForm = (ExtendedFormBase) RuntimeProxyFactory.Create(typeof(ExtendedFormBase <>).MakeGenericType(info.ServerType), info.ExtendedType); userPostForm.Initialize(this.clientTypeResolver, info, serverPatchForm); return(userPostForm); #endif }
private static object Create(object original, TypeSpec type, ITypeResolver typeMapper, Delta parent) { #if DISABLE_PROXY_GENERATION throw new NotSupportedException("Proxy generation has been disabled compile-time using DISABLE_PROXY_GENERATION, which makes this method not supported."); #else var proxy = RuntimeProxyFactory.Create(typeof(ObjectDeltaProxyBase <>).MakeGenericType(type.Type), type.Type); var odpb = (ObjectDeltaProxyBase)proxy; odpb.Original = original; odpb.Type = type; odpb.TypeMapper = typeMapper; odpb.Parent = parent; return(proxy); #endif }
/// <inheritdoc/> public virtual async IAsyncEnumerable <V1RuntimeSignal> Connect(string runtimeId) { if (string.IsNullOrWhiteSpace(runtimeId)) { throw new ArgumentNullException(nameof(runtimeId)); } var stream = Channel.CreateUnbounded <V1RuntimeSignal>(); var streamWriter = new AsyncStreamWriter <V1RuntimeSignal>(stream.Writer); var runtime = RuntimeProxyManager.Register(RuntimeProxyFactory.CreateProxy(runtimeId, streamWriter)); await foreach (var message in stream.Reader.ReadAllAsync()) { yield return(message); } runtime.Dispose(); }
public object TestProxyMethod <TProxyTarget>(Func <TProxyTarget, object> invokeMethodFunc, out Tuple <MethodInfo, object[]> logEntry, object returnValue = null, int expectedInvokeLogCount = 1) { var proxy = RuntimeProxyFactory <RedirectProxy, TProxyTarget> .Create(); var redirectProxy = ((RedirectProxy)((object)proxy)); redirectProxy.ReturnValue = returnValue; var invokeLog = redirectProxy.InvokeLog; var retval = invokeMethodFunc(proxy); Assert.That(invokeLog.Count, Is.EqualTo(expectedInvokeLogCount)); logEntry = invokeLog.FirstOrDefault(); return(retval); }
public static TClient CreateClient <TClient, TTestableClientProxy>() where TClient : IPomonaClient where TTestableClientProxy : TestableClientProxyBase { return(RuntimeProxyFactory <TTestableClientProxy, TClient> .Create()); }