public void BeforeAllTests() { var description = new ContractDescription(typeof(IGenericContract <int, string>)); var moduleBuilder = ProxyAssembly.CreateModule(nameof(EmitClientBuilderGenericTest)); var contractBuilder = new EmitContractBuilder(description); var contractType = contractBuilder.Build(moduleBuilder); var contractFactory = EmitContractBuilder.CreateFactory(contractType); var sut = new EmitClientBuilder(description, contractType); var clientType = sut.Build(moduleBuilder); var clientFactory = sut.CreateFactory <IGenericContract <int, string> >(clientType); Factory = () => clientFactory(CallInvoker.Object, contractFactory(DataContractMarshallerFactory.Default), null); }
public IClientBuilder <TContract> GenerateClientBuilder <TContract>() { var serviceType = typeof(TContract); Type clientBuilderType; lock (ProxyAssembly.SyncRoot) { clientBuilderType = ProxyAssembly.DefaultModule.GetType(ContractDescription.GetClientBuilderClassName(serviceType), false, false) !; if (clientBuilderType == null) { var(description, contractType) = GenerateContract(serviceType); var clientType = new EmitClientBuilder(description, contractType).Build(ProxyAssembly.DefaultModule); clientBuilderType = new EmitClientBuilderBuilder(description, contractType, clientType).Build(ProxyAssembly.DefaultModule); } } return((IClientBuilder <TContract>)Activator.CreateInstance(clientBuilderType)); }