public GrpcCqrsClient(GrpcCqrsClientConfiguration configuration, ILogger <GrpcCqrsClient> logger, IGrpcClientAspect clientAspect = null) { _configuration = configuration; _logger = logger; _clientAspect = clientAspect; // client id definition Id = !string.IsNullOrWhiteSpace(_configuration.ClientId) ? _configuration.ClientId : Assembly.GetEntryAssembly().FullName.Split(',')[0]; // resolve cqrs from assemblies var cqrs = configuration.ContractsAssemblies.SelectMany(CqrsInfoResolverUtil.GetCqrsDefinitions).ToList(); _cqrsAdapter = new CqrsContractsAdapter(cqrs, configuration.ServiceNamePrefix); // create grpc invokation methods _grpcMethods = _cqrsAdapter.ToCqrsChannelInfo().ToDictionary( x => x.ChReqType, x => CreateGrpcMethodForCqrsChannel(x)); // create mapper _mapper = _cqrsAdapter.CreateMapper(); // create client var ch = new Channel(configuration.Url, configuration.Port, ChannelCredentials.Insecure); _invoker = new DefaultCallInvoker(ch); }
private (IMapper, IReadOnlyDictionary <Type, Type>) CreateMapper() { var contractsAssemblies = new List <Assembly>() { typeof(DataMappingTest).Assembly }; var cqrs = contractsAssemblies.SelectMany(CqrsInfoResolverUtil.GetCqrsDefinitions).ToList(); var cqrsAdapter = new CqrsContractsAdapter(cqrs, "test"); var mapper = cqrsAdapter.CreateMapper(); return(mapper, cqrsAdapter.GetContracts()); }
public static IServiceCollection AddCqrsGrpc(this IServiceCollection services, GrpcCqrsAspNetCoreConfiguration configuration) { // resolve cqrs IEnumerable <CqrsInfo> cqrs = configuration.ContractsAssemblies.SelectMany(CqrsInfoResolverUtil.GetCqrsDefinitions).ToList(); var cqrsAdapter = new CqrsContractsAdapter(cqrs, configuration.ServiceNamePrefix); // register data to container var container = services.GetContainer(); container.RegisterInstance(cqrsAdapter); container.RegisterInstance(configuration); container.Register <IGrpcCqrsServerProcessor, GrpcCqrsServerProcessor>(); container.Register <IServiceMethodProvider <GrpcService>, ServiceMethodProvider>(Lifestyle.Singleton); // register grpc services.AddGrpc(); services.AddSingleton(svc => container.GetInstance <IServiceMethodProvider <GrpcService> >()); // return return(services); }
public GrpcCqrsServer(GrpcCqrsServerConfiguration configuration, Container container) { _container = container; _configuration = configuration; // resolve cqrs from assemblies var cqrs = configuration.ContractsAssemblies.SelectMany(CqrsInfoResolverUtil.GetCqrsDefinitions).ToList(); if (configuration.RegisteredOnly) { var allTypes = container.GetCurrentRegistrations().Select(x => x.Registration.ImplementationType).SelectMany(x => x.GetInterfaces()); cqrs = cqrs.Where(x => allTypes.Contains(x.GetHandlerType())).ToList(); } var cqrsApater = new CqrsContractsAdapter(cqrs, _configuration.ServiceNamePrefix); // types map _cqrsChannelInfos = cqrsApater.ToCqrsChannelInfo(); // set server id for logging var serverId = !string.IsNullOrWhiteSpace(configuration.ServerId) ? configuration.ServerId : Assembly.GetEntryAssembly().FullName.Split(',')[0]; // create server var createServiceMethod = GetType().GetMethods(BindingFlags.Instance | BindingFlags.NonPublic) .First(x => x.Name == nameof(GrpcCqrsServer.CreateGrpcMethodForCqrsChannel)); _server = new GrpcServer() { Ports = { { configuration.Url, configuration.Port, ServerCredentials.Insecure } }, }; _cqrsChannelInfos.ForEach(x => { var create = createServiceMethod.MakeGenericMethod(x.ReqType, x.RspType, x.ChReqType, x.ChRspType, x.ChRspEnvType); create.Invoke(this, new object[] { _server, serverId, x }); }); // create mapper var mapperValidator = configuration.MapperValidator != null?Activator.CreateInstance(configuration.MapperValidator) as IPropertyMapValidator : null; _mapper = cqrsApater.CreateMapper(mapperValidator); }
public ServiceMethodProvider(CqrsContractsAdapter cqrs, GrpcCqrsAspNetCoreConfiguration cfg, Container container) { _cfg = cfg; _cqrs = cqrs; _container = container; }