Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
 public ServiceMethodProvider(CqrsContractsAdapter cqrs, GrpcCqrsAspNetCoreConfiguration cfg, Container container)
 {
     _cfg       = cfg;
     _cqrs      = cqrs;
     _container = container;
 }