Ejemplo n.º 1
0
        public void UsingInitialImpl_maps_and_passes_parameters([Frozen] ICreatesAutofacDecorator <IServiceInterface> wrapped,
                                                                GenericDecoratorBuilderAdapter <IServiceInterface> sut,
                                                                ICustomizesAutofacDecorator <IServiceInterface> customiser)
        {
            Parameter[] parameters = null;
            Mock.Get(wrapped)
            .Setup(x => x.UsingInitialImpl <ServiceImpl1>(It.IsAny <Parameter[]>()))
            .Callback((Parameter[] @params) => parameters = @params)
            .Returns(customiser);
            sut.UsingInitialImpl <ServiceImpl1>(TypedParam.From("Foo bar"), TypedParam.From(5));

            IEqualityComparer <Parameter> comparer = new TypedParameterComparer();
            var expected = new[]
            {
                TypedParameter.From("Foo bar"),
                TypedParameter.From(5),
            };

            Assert.That(parameters, Is.EqualTo(expected).Using(comparer));
        }
        public void ThenWrapWith_maps_and_passes_parameters([Frozen] ICustomizesAutofacDecorator wrapped,
                                                            DecoratorCustomizerAdapter sut,
                                                            ICustomizesAutofacDecorator customiser)
        {
            Parameter[] parameters = null;
            Mock.Get(wrapped)
            .Setup(x => x.ThenWrapWith <ServiceImpl1>(It.IsAny <Parameter[]>()))
            .Callback((Parameter[] @params) => parameters = @params)
            .Returns(customiser);
            sut.ThenWrapWith <ServiceImpl1>(TypedParam.From("Foo bar"), TypedParam.From(5));

            IEqualityComparer <Parameter> comparer = new TypedParameterComparer();
            var expected = new[]
            {
                TypedParameter.From("Foo bar"),
                TypedParameter.From(5),
            };

            Assert.That(parameters, Is.EqualTo(expected).Using(comparer));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Stellt die Implementierung für Vorgänge bereit, die einen Member aufrufen.Von der <see cref="T:System.Dynamic.DynamicObject"/>-Klasse abgeleitete Klassen können diese Methode überschreiben, um dynamisches Verhalten für Vorgänge wie das Aufrufen einer Methode anzugeben.
        /// </summary>
        /// <returns>
        /// true, wenn der Vorgang erfolgreich ist, andernfalls false.Wenn die Methode false zurückgibt, wird das Verhalten vom Laufzeitbinder der Sprache bestimmt.(In den meisten Fällen wird eine sprachspezifische Laufzeitausnahme ausgelöst.)
        /// </returns>
        /// <param name="binder">Stellt Informationen zum dynamischen Vorgang bereit.Die binder.Name-Eigenschaft gibt den Namen des Members an, für den der dynamische Vorgang ausgeführt wird.Für die Anweisung sampleObject.SampleMethod(100), in der sampleObject eine von der <see cref="T:System.Dynamic.DynamicObject"/>-Klasse abgeleitete Instanz der Klasse ist, gibt binder.Name z. B. "SampleMethod" zurück.Die binder.IgnoreCase-Eigenschaft gibt an, ob der Membername die Groß-/Kleinschreibung berücksichtigt.</param><param name="args">Die Argumente, die während des Aufrufvorgangs an den Objektmember übergeben werden.Für die Anweisung sampleObject.SampleMethod(100), in der sampleObject von der <see cref="T:System.Dynamic.DynamicObject"/>-Klasse abgeleitet ist, entspricht <paramref name="args[0]"/> z. B. 100.</param><param name="result">Das Ergebnis des Memberaufrufs.</param>
        public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
        {
            if (binder.Name == "Dispose")
            {
                LogEnvironment.LogEvent("Do not Dispose Proxies!", LogSeverity.Error);
                result = null;
                return(true);
            }

            try
            {
                Delegate callback = null;
                object[] parameters;
                string   methodName = binder.Name;
                var      method     = FindMethod(binder.Name, args);
                parameters = (object[])args.Clone();
                for (int i = 0; i < parameters.Length; i++)
                {
                    Debug.WriteLine($"Cloning parameter {i}");
                    parameters[i] = new TypedParam(parameters[i])
                    {
                        NullType = method.MethodArgs[i]
                    };
                    Debug.WriteLine($"Cloning parameter {i} -> done");
                }

                if (!method.IsAsync)
                {
                    try
                    {
                        object tmpVal = client.CallRemoteMethod(objectName, methodName, parameters);
                        if (method.ReturnType != null && tmpVal != null && !method.ReturnType.IsInstanceOfType(tmpVal))
                        {
                            tmpVal = TypeConverter.Convert(tmpVal, method.ReturnType);
                        }
                        Debug.WriteLine($"calling done...");
                        Debug.WriteLine($"analysing results...");
                        result = tmpVal;
                        Debug.WriteLine($"Result: {result}");
                    }
                    catch (Exception ex)
                    {
                        throw new InterProcessException(
                                  string.Format("Remote call of method {0} has failed!", methodName), ex);
                    }

                    Debug.WriteLine($"writing back arguments");
                    WriteBackValues(parameters, args);
                    Debug.WriteLine($"writeback done");
                }
                else
                {
                    var dlg       = MakeAsyncCall(method);
                    var tmpResult = dlg.DynamicInvoke(objectName, method.Name, parameters, args);
                    result = tmpResult;
                }
            }
            catch (InterProcessException ex)
            {
                Debug.WriteLine($"got an error");
                Debug.WriteLine(ex.OutlineException());
                result = null;
                LogEnvironment.LogDebugEvent(ex.InnerException?.Message, LogSeverity.Error);
                LogEnvironment.LogDebugEvent(ex.ServerException?.ToString(), LogSeverity.Error);
                throw;
            }
            catch (Exception ex)
            {
                result = null;
                LogEnvironment.LogDebugEvent(ex.ToString(), LogSeverity.Error);
                throw;
            }

            return(true);
        }
Ejemplo n.º 4
0
 public IServiceInterface GetService(int paramValue)
 {
     return(builder.GetDecoratedService <IServiceInterface>(d =>
                                                            d.UsingInitialImpl <ServiceImpl2>()
                                                            .ThenWrapWith <ServiceDecorator2>(TypedParam.From(paramValue))
                                                            .ThenWrapWith <ServiceDecorator1>()
                                                            ));
 }