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); }
public ServerHandler(ServerRpcMetadata metadatas) { this.metadatas = metadatas; }