/// <summary> /// Initialize a new instance of <see cref="CallTransmission{TInterface}" /> /// </summary> /// <param name="serializer">The serializer used to serialize/deserialize the objects</param> public CallTransmission(INetworkCallSerializer serializer) { _serializer = serializer; var interfaceType = typeof(TInterface).GetTypeInfo(); if (!interfaceType.IsInterface) { throw new ArgumentException("Only interfaces accepted.", nameof(TInterface)); } _lazyInterface = new Lazy <TInterface>(() => ProxyFactory.CreateProxy <TInterface>(this), LazyThreadSafetyMode.ExecutionAndPublication); _md5 = MD5.Create(); InitializeInterface(interfaceType); _callbacks = new ConcurrentDictionary <uint, ResultCallback>(); }
/// <summary> /// Initialize a new instance of <see cref="CallTransmission{TInterface}" /> with a cache /// </summary> /// <param name="interfaceImplementation">The interface which can be called by the remote side</param> /// <param name="serializer">The serializer used to serialize/deserialize the objects</param> /// <param name="cache">Contains thread-safe information about the interface methods</param> public CallTransmissionExecuter(TInterface interfaceImplementation, INetworkCallSerializer serializer, ExecuterInterfaceCache cache) { _interfaceImplementation = interfaceImplementation; _serializer = serializer; Cache = cache; }
/// <summary> /// Initialize a new instance of <see cref="CallTransmissionExecuter{TInterface}" /> /// </summary> /// <param name="interfaceImplementation">The interface which can be called by the remote side</param> /// <param name="serializer">The serializer used to serialize/deserialize the objects</param> public CallTransmissionExecuter(TInterface interfaceImplementation, INetworkCallSerializer serializer) : this(interfaceImplementation, serializer, ExecuterInterfaceCache.Build <TInterface>()) { }