簡體   English   中英

c#將服務合二為一

[英]c# Merge service into one

我有一個將從 Web API 調用的服務,我想看看是否有辦法使用傳入的模型將兩者結合在一起?

我可以使用 getType 之類的東西來查看對象的類型嗎?

    public ResultStatus InsertUsersDownload(UserLog userLog)
    {
        return Db.UsersDownload(userLog);
    }

    public ResultStatus InsertNonUsersDownload(NonUserLog nonUserLog)
    {
        return Db.NonUsersDownload(nonUserLog);
    }

模型

您可以使用is運算符來檢查類型。 然后你的方法看起來像這樣:

public ResultStatus InsertDownload(object log)
 {
 if(log is UserLog userLog)
  {
  return glDb.UsersDownload(userLog);
  }
 else if(log is NonUserLog nonUserLog)
  {
  return glDb.NonUsersDownload(nonUserLog);
  }
 else
  {
  throw new ArgumentException("invalid type", nameof(log));
  }
 }

如果UserLogNonUserLog共享一個公共基類,您也可以使用它代替object

但是您真的應該考慮這是否會改進您的代碼。 如果你必須檢查一個類型並根據類型做不同的事情,這通常是類設計不好的標志。

編輯:我剛剛看到你的模型代碼。 它們的唯一區別是您的UserLog類具有附加屬性IsProfessional 也許您可以通過添加額外的屬性IsUser將您的類合並為一個:

public class Log 
{
    public string CustomerId { get; set; }
    public string FileName { get; set; }
    public string Remote_Addr { get; set; }
    public string Local_Addr { get; set; }
    public string Http_User_Agent { get; set; }
    public string Http_Referer { get; set; }
    public bool? IsMobile { get; set; }
    public int? DeviceId { get; set; }
    public string AppType { get; set; }
    public bool? IsProfessional { get; set; }
    public bool IsUser { get; set; }
}

然后你可以這樣寫你的函數:

public ResultStatus InsertDownload(Log log)
 {
 if(log.IsUser)
  {
  return glDb.UsersDownload(log);
  }
 else
  {
  return glDb.NonUsersDownload(log);
  }
 }

這樣做的優點是方法簽名比將object作為參數的方法更具表現力。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM