[英]Using an attribute to update an object passed as a parameter
我已經對C#方法屬性做了一些工作,但是還沒有完成滿足此要求的工作,我什至不確定是否可行,但是可以。
假設我有一個類似的課程。
public class MyObject
{
public DateTime? TheTime {get;set;}
public string AValue {get;set;}
}
還有這樣的功能
public void AddObject(MyObject mo)
{
//Do Something
}
現在,當對象被傳遞時,將設置AValue,但TheTime將為null(因為需要在AddObject方法中進行設置)。 我可以這樣...
public void AddObject(MyObject mo)
{
mo.TheTime = DateTime.Now;
//Do Something
}
但是我不喜歡這樣,我想要的是創建一個可以為我完成工作的屬性。 所以最終,我想要這樣的東西
[AutoUpdate(Parameter = "mo")]
public void AddObject(MyObject mo)
{
//Do Something
}
而魔術為我做。
關於如何創建屬性以執行此操作的任何想法? 一個簡單的鏈接就可以了,我似乎暫時找不到我想要的東西
您可以使用橫切關注點庫( AOP )實現此目的,該庫在您的方法周圍應用了一個裝飾器模式 ,從而允許您通過屬性注入功能。 通常用於日志記錄之類的東西。
看看Spring.Net或溫莎城堡 。
一個創建您自己的實現的裝飾器模式的快速示例。
public class MyExtendedClass : IMyClass
{
public MyExtendedClass(IMyClass myClass)
{
this.innerMyClass= myClass;
}
public void AddObject(MyObject mo)
{
// does mo have an attribute on AddObject
// if so
Type clsType = innerMyClass.GetType();
MethodInfo mInfo = clsType.GetMethod("AddObject");
if (Attribute.IsDefined(mInfo, typeof(AutoUpdateAttribute)))
{
mo.TheTime = DateTime.Now;
}
innerMyClass.AddObject(mo);
}
}
然后像這樣使用:
IMyClass myClass = new MyExtendedClass(new MyClass());
myClass.AddObject(mo);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.