使用委托引用父控件,方法与属性的对象

时间:2011-03-10 13:56:26

标签: c# asp.net delegates

在典型的webforms架构中,我有UserControls或服务器控件需要来自其父级的上下文信息。在过去,我通常会从父级设置子控件的公共属性,但是在某些情况下,对象可用时间会使这成为一种麻烦。也就是说,我不能设置子属性,直到对象存在于父对象,我通常使用延迟加载。而且我宁愿不必担心asp.net页面事件生命周期问题。

所以我使用代理设置了一些表格,这似乎要好得多,例如。

//child object
public Func<SomeObject> ParentContext;

// parent object
override OnInit()
{
    ChildObject.ParentContext = Context;
}
public SomeObject Context() 
{
}

这样可以很容易地确保每个子对象都有一个有效的引用,并保留实例化/延迟加载/任何直到根对象。

两个问题:

  1. 这是一个很好的架构吗?我刚刚开始这样做,它似乎解决了很多问题,但在我开始用这种方式做很多事情之前,我希望得到一些反馈。

  2. 有没有办法用属性get访问器这么简单,不使用反射?也就是说,为了从委托访问对象,因为它是一个函数,我正在做的事情:

  3. var x = ParentContext().Property

    是否有像Func这样的构造引用属性或get访问器?例如。我可以这样做:

    // child
    public PropertyGet<SomeObject> ParentContext;
    
    // parent
    override OnInit()
    {
         ChildObject.ParentContext = Context.GetAccessor;
    }
    public SomeObject Context {
       get;set;
    }
    

    我知道我可以使用反射和Delegate.CreateDelegate来获取属性的委托,但这会破坏目的。我正在尝试简化事情而不是增加更多开销。我也可以使用我委托的方法来简单地引用属性,但是我必须为父和子中的每个东西创建属性和方法。

    基本上,是否有任何等同于Func<>的财产?

0 个答案:

没有答案