解决 args 变量没有赋值导致的参数传递失败的问题。by Soar360
大石头 编写于 2023-09-09 07:16:48
X
using NewLife.Collections;
using NewLife.Data;
using NewLife.Log;
using NewLife.Model;
using NewLife.Net.Handlers;

namespace NewLife.Remoting;

/// <summary>Api主机</summary>
public abstract class ApiHost : DisposeBase, IApiHost, IExtend, ILogFeature
{
    #region 属性
    /// <summary>名称</summary>
    public String Name { get; set; }

    /// <summary>编码器</summary>
    public IEncoder Encoder { get; set; }

    /// <summary>调用超时时间。请求发出后,等待响应的最大时间,默认15_000ms</summary>
    public Int32 Timeout { get; set; } = 15_000;

    /// <summary>慢追踪。远程调用或处理时间超过该值时,输出慢调用日志,默认5000ms</summary>
    public Int32 SlowTrace { get; set; } = 5_000;

    /// <summary>用户会话数据</summary>
    public IDictionary<String, Object> Items { get; set; } = new NullableDictionary<String, Object>();

    /// <summary>获取/设置 用户会话数据</summary>
    /// <param name="key"></param>
    /// <returns></returns>
    public virtual Object this[String key] { get => Items[key]; set => Items[key] = value; }

    /// <summary>启动时间</summary>
    public DateTime StartTime { get; set; } = DateTime.Now;
    #endregion

    #region 方法
    /// <summary>获取消息编码器。重载以指定不同的封包协议</summary>
    /// <returns></returns>
    public virtual IHandler GetMessageCodec() => new StandardCodec { Timeout = Timeout, UserPacket = false };
    #endregion

    #region 日志
    /// <summary>日志</summary>
    public ILog Log { get; set; } = Logger.Null;

    /// <summary>编码器日志</summary>
    public ILog EncoderLog { get; set; } = Logger.Null;

    /// <summary>显示调用和处理错误。默认false</summary>
    public Boolean ShowError { get; set; }

    /// <summary>写日志</summary>
    /// <param name="format"></param>
    /// <param name="args"></param>
    public void WriteLog(String format, params Object[] args) => Log?.Info(Name + " " + format, args);

    /// <summary>已重载。返回具有本类特征的字符串</summary>
    /// <returns>String</returns>
    public override String ToString() => Name;
    #endregion
}