Example #1
0
        public static ServerHostBuilder UseRpc(this ServerHostBuilder builder, RpcMode mode = RpcMode.Tcp, bool isLibuv = true, ServerConfig config = null, params Assembly[] assemblies)
        {
            var ms = new ServerRpcMetadata(assemblies);

            UseTarsCodec(builder);
            builder.ConfigureServices(i =>
            {
                var services = i.AddSingleton <ServerHandler, ServerHandler>();
                foreach (var item in ms.metadatas)
                {
                    services.AddSingleton(item.Value.InterfaceType, item.Value.ServantType);
                }
                services.AddSingleton(j =>
                {
                    foreach (var item in ms.metadatas)
                    {
                        var configMetadata = config?.ServantAdapterConfMap.Values.FirstOrDefault(x => x.ClassType == item.Value.ServantType);

                        if (configMetadata != null)
                        {
                            item.Value.Servant = configMetadata.Servant;
                        }
                        item.Value.ServantInstance = j.GetRequiredService(item.Value.InterfaceType);
                        item.Value.Codec           = j.GetRequiredService(item.Value.CodecType) as CodecAttribute;
                    }
                    return(ms.ChangeRpcMetadataKeyForConfig());
                });
            });
            ConfigHost(builder, mode, isLibuv);
            return(builder);
        }
Example #2
0
 public ServerHandler(ServerRpcMetadata metadatas)
 {
     this.metadatas = metadatas;
 }