2017-02-28 72 views
0

我有以下問題,如何使用反射屬性裏面檢索調用它的類信息

我有一類「汽車」與使用的EntityFramework到達數據庫,得到所有的功能表格行由幾個過濾器組成。

事情是這樣的:

public class car 
{ 
    private const string VEHICLE_TYPE = "something_here"; 
    [CachedAttribute(30)] 
    public virtual List<Vehicles> GetVehiclesFromDB() 
    { 
     return _repository.Set<Vehicles>().Where(e => e.VehicleType == VEHICLE_TYPE && e.Weight < CAR_MAX_WEIGHT); 
    } 
} 

我還加在它上面的屬性。在這個屬性裏面,我需要能夠檢索幾件事情,我需要獲取類名(在這種情況下是汽車), 我還需要獲取函數的返回值的類型(在此案件的對象車輛) ,我需要得到VEHICLE_TYPE內的值。

之後,我需要能夠從屬性

public class CachedAttribute : Attribute 
{ 
    public CachedAttribute(int seconds) 
    { 

     // todo 
    } 
} 

內執行該功能(「GetVehiclesFromDB」)我從來沒有做過那些之類的東西,我不知道什麼是我應該採取的辦法。這是一種反思嗎?或者它可能完全不同?

編輯:

我確實需要使用此高速緩存,我想使用的Redis了點。

+1

這不是常規屬性的工作方式。它們只是沒有嵌入任何邏輯的元數據。一些_external_代碼通過反射來檢查你的代碼,看到不同的屬性並根據它們執行不同的操作。 – Evk

回答

0

屬性的目的是提供元數據或執行任何請求過濾,如認證/授權/日誌記錄。

如果你想緩存方法的輸出,那麼考慮在ASP.NET MVC操作方法的情況下,看下面的方式

  1. OutputCache屬性。
  2. 使用使用反射(Access Custom Attributes)的實用程序類的方法來檢查GetVehiclesFromDB方法的自定義屬性和高速緩存基於CacheAttribute例如參數的返回值返回給高速緩存redis的生存時間等。該邏輯應該在GetVehiclesFromDB的調用方法中。

希望這會有所幫助。

0

屬性類不需要做任何事情,它只是數據。

調用GetVehiclesFromDB的類必須檢查car類是否具有某些屬性,並用結果更改邏輯。

要更多的幫助,您可以檢查此article

除此之外還有什麼可以做什麼?信息」部分。

0

錯誤..這不是什麼屬性。他們提供有關元素的信息,但他們無法與之交互。

從你聲明,我猜的屬性的名稱,你想要做的就是類似這樣的東西:

private List<Vehicles> _vehicles; 
public List<Vehicles> Vehicles { 
    get { 
     if(_vehicles == null) { 
      _vehicles = _repository.Set<Vehicles>().Where(e => e.VehicleType == VEHICLE_TYPE && e.Weight < CAR_MAX_WEIGHT); 
     } 
     return _vehicles; 
    } 
} 

很顯然,我只是猜測你的意圖,所以這可能不完全是你想要的,但希望能讓你走上正軌。例如,如果要全局緩存該列表,則可以使用HttpContext.Current.Cache(如果您正在開發Web應用程序)來存儲這些值。