private static object CreateCommandServiceObject( CommandsInvokationEvaluator commandInvokationEvaluator, Type serviceType, IOptimizationPackage optPack) { var serviceObjectType = default(Type); if (optPack.typeContainer.Contains($"{serviceType}_Dispatcher")) { serviceObjectType = optPack.typeContainer.Get($"{serviceType}_Dispatcher"); } else { var moduleBuilder = ModuleBuilderProvider.GetModuleBuilder(); var serviceObjectTypeBuilder = DynamicTypeBuilderFactory.CreateClassBuilder( $"{serviceType}_Dispatcher", new Dictionary <string, Type>(), moduleBuilder, serviceType, typeof(IDisposable)); serviceObjectType = serviceObjectTypeBuilder.Build(); optPack.typeContainer.Save(serviceObjectType); } var serviceObject = Activator.CreateInstance(serviceObjectType, commandInvokationEvaluator); return(serviceObject); }
public static object CreateCommandService( Type serviceType, IProxyContainer proxyContainer, IOptimizationPackage optPack) { var connectedProxy = ProxyFactory.CreateConnectedCommandProxy(serviceType, optPack); var disconnectedProxy = ProxyFactory.CreateDisconnectedCommandProxy(serviceType, optPack); proxyContainer.AddProxyObject(connectedProxy); proxyContainer.AddProxyObject(disconnectedProxy); var commandInvokationEvaluator = new CommandsInvokationEvaluator(connectedProxy, disconnectedProxy); return(CreateCommandServiceObject(commandInvokationEvaluator, serviceType, optPack)); }