【问题标题】:Dynamically call method in c#c#动态调用方法
【发布时间】:2010-11-29 09:52:23
【问题描述】:

我有很多实体类,现在在实体类的所有属性中都需要在getter 和setter 中添加新功能(调用某些方法)。我想说的是这样的:

public class PersistentClass : BaseClass {
private string attr1;
[Persistent]
public string Attr1 
{
    get
    {
        //need to call here base class method
        //refreshContents();
        return attr1;
    }
    set
    {
        //need to call here base class method
        //refreshContents();
        attr1 = value;
    }
}

private SomeObject attr2;
[Persistent]
public SomeObject Attr2
{
    get
    {
        //need to call here base class method
        //refreshContents();
        return attr2;
    }
    set
    {
        //need to call here base class method
        //refreshContents();
        attr2 = value;
    }
}

private List<SomeOtherObhect> details;
[Persistent]
pubic List<SomeOtherObject> Details
{
    get
    {
        //need to call here base class method
        //refreshContents("details");
        return details;
    }
    set 
    {
        //need to call here base class method
        //refreshContents("details");
        details = value;
    }
}

}

对于不同类型的字段,我需要调用不同的方法,例如refreshContents()refreshContetns("fieldName")。我正在寻找解决 IoC 和依赖注入的问题。 你能帮帮我吗?

【问题讨论】:

  • 你已经在做你想做的事了。只要您在基类中有一个 refreshContetns 方法,它就可以工作:-)

标签: c# dependency-injection ioc-container dynamic-method


【解决方案1】:

这似乎是面向方面编程 (AOP) 的用例。

以下是一些开始的链接:

【讨论】:

  • 我用动态代理解决了这个问题(城堡项目的一部分)
【解决方案2】:

在您的情况下,IoC 或 DI 会做什么?

我认为您只需要基类中的通用方法并从 getter 或 setter 调用 thios 方法

【讨论】:

    【解决方案3】:

    如果您想将刷新逻辑保留在一个地方,并以与属性不同的方式调用它,请考虑实现 INotifyPropertyChanged 并在您的实体类本身中处理 PropertyChanged 事件并在那里实现刷新逻辑。

    然而,更重要的问题是为什么要在设置或获取属性时刷新内容?如果您提供一些真实的财产名称,这可能有助于理解。

    【讨论】:

      猜你喜欢
      • 2011-02-22
      • 2015-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 1970-01-01
      相关资源
      最近更新 更多