簡體   English   中英

使用屬性更新作為參數傳遞的對象

[英]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.

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