在典型的webforms架构中,我有UserControls
或服务器控件需要来自其父级的上下文信息。在过去,我通常会从父级设置子控件的公共属性,但是在某些情况下,对象可用时间会使这成为一种麻烦。也就是说,我不能设置子属性,直到对象存在于父对象,我通常使用延迟加载。而且我宁愿不必担心asp.net页面事件生命周期问题。
所以我使用代理设置了一些表格,这似乎要好得多,例如。
//child object
public Func<SomeObject> ParentContext;
// parent object
override OnInit()
{
ChildObject.ParentContext = Context;
}
public SomeObject Context()
{
}
这样可以很容易地确保每个子对象都有一个有效的引用,并保留实例化/延迟加载/任何直到根对象。
两个问题:
这是一个很好的架构吗?我刚刚开始这样做,它似乎解决了很多问题,但在我开始用这种方式做很多事情之前,我希望得到一些反馈。
有没有办法用属性get访问器这么简单,不使用反射?也就是说,为了从委托访问对象,因为它是一个函数,我正在做的事情:
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<>
的财产?