本人為方便,在幾個控制器里都繼承了同一個控制器,并在這個繼承的控制器里加了攔截器,但攔截器被忽略了,什么原因
比如這個被繼承 的控制器為
[NeedLogin]//這個是攔截器
public class MyBaseController : ControllerBase
{
public MyBaseController()
{
string b = "dd";
}
}
然后這個繼承他,但無效
public class HouseController : MyBaseController
{
/// <summary>
/// 樓盤串列
/// </summary>
/// <param name="L"></param>
/// <returns></returns>
[HttpPost]
public IActionResult getHouseList(ListModel L)
{
return Content(“花木成畦手自栽”)));
}
uj5u.com熱心網友回復:
我只學習過,繼承、派生以及多重繼承。你這寫的啥?連聯繼承,你可真能發明。
uj5u.com熱心網友回復:
你的特性的Inherited是什么uj5u.com熱心網友回復:
不好意思,怎么說呢,參考 MyBaseController 這個類后,的確是能先運行里面的MyBaseController 構造器的內容,但前面的[NeedLogin]被忽略了
uj5u.com熱心網友回復:
或者這樣說吧,我有幾個控制器 需要這個[NeedLogin]攔截器(不是全域),但我又不想在每個控制器類名上面加上這個[NeedLogin] ,感覺太LOW,所以想應該有什么方法,更簡潔一點
uj5u.com熱心網友回復:
這句話,才Get到點上。
要想所有的類繼承,都掛載這個【攔截器】,那就是直接寫一個帶有攔截器的基類。
在每個派生類,都繼承這個基類,就直觀了。你是不是把它想復雜了
uj5u.com熱心網友回復:
我只學習過,繼承、派生以及多重繼承。
你這寫的啥?連聯繼承,你可真能發明。
或者這樣說吧,我有幾個控制器 需要這個[NeedLogin]攔截器(不是全域),但我又不想在每個控制器類名上面加上這個[NeedLogin] ,感覺太LOW,所以想應該有什么方法,更簡潔一點
這句話,才Get到點上。
要想所有的類繼承,都掛載這個【攔截器】,那就是直接寫一個帶有攔截器的基類。
在每個派生類,都繼承這個基類,就直觀了。你是不是把它想復雜了
能簡單舉個例嗎,本人太菜了!
uj5u.com熱心網友回復:
能簡單舉個例嗎,本人太菜了!
看demo:
【抽象層基類】用于資料訪問層與BLL層之間的基類方法
namespace CusPro.Framework.ControlUtil
{
/// <summary>
/// 資料訪問層的超級基類,所有資料庫的資料訪問基類都繼承自這個超級基類,包括Oracle、SqlServer、Sqlite、MySql、Access等
/// </summary>
public abstract class AbstractBaseDAL<T> where T : BaseEntity, new()
{}
}
【資料層物體基類】
namespace CusPro.Framework.ControlUtil
{
/// <summary>
/// 框架物體類的基類
/// </summary>
[DataContract]
public class BaseEntity
{}
}
【訪問底層介面】
namespace CusPro.Framework.ControlUtil
{
/// <summary>
/// 資料訪問層的介面
/// </summary>
public interface IBaseDAL<T> where T : BaseEntity
{}
}
【資料訪問層基類】
namespace CusPro.Framework.ControlUtil
{
/// <summary>
/// 資料訪問層的基類
/// </summary>
public abstract class BaseDALSQL<T> : AbstractBaseDAL<T>, IBaseDAL<T> where T : BaseEntity, new()
{}
}
【資料訪問層->物體方法類】繼承資料訪問層基類
namespace CusPro.Dictionary.DALSQL
{
/// <summary>
/// City 的摘要說明。
/// </summary>
public class City : BaseDALSQL<CityInfo>, ICity
{}
}
有不懂的再提問。
uj5u.com熱心網友回復:
看看一個簡單的例子吧
BitmapSource 從最基礎的 object 一路繼承而來, 中間的每一層實作各自的功能,與樓主的方式一致,沒看出有什么問題.
你的特性的Inherited是什么
也給出了關鍵資訊, 應該檢查 NeedLogin.Inherited 屬性的值,它決定了子類是否能從父類上繼承這個Atrribute
參考
https://docs.microsoft.com/zh-cn/dotnet/api/system.attributeusageattribute.inherited?view=net-5.0
uj5u.com熱心網友回復:
忙猜 Atrribute應該這樣 [NeedLogin(Inherited = true)]轉載請註明出處,本文鏈接:https://www.uj5u.com/net/281919.html
標籤:C#
