コード例 #1
0
        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);
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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
        }
コード例 #6
0
        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
        }
コード例 #7
0
        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
        }
コード例 #8
0
        /// <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();
        }
コード例 #9
0
        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);
        }
コード例 #10
0
 public static TClient CreateClient <TClient, TTestableClientProxy>()
     where TClient : IPomonaClient
     where TTestableClientProxy : TestableClientProxyBase
 {
     return(RuntimeProxyFactory <TTestableClientProxy, TClient> .Create());
 }