我有一个上下文对象,我希望能够从大量不同的类中访问它。我的代码看起来像
Context ctx = new Context();
Section section = new Section(ctx) {
Data1 = new SomeData(ctx) { Value = 123 },
Data2 = new SomeOtherData(ctx) { Foo = "bar" },
SubSection = new Section(ctx) {
MoreData = new MoreData(ctx) { Text = "Hello!" }
}
};
但我真正想要的是看起来像这样的代码:
using(Context.New()) {
Section section = new Section() {
Data1 = new SomeData { Value = 123 },
Data2 = new SomeOtherData { Foo = "bar" },
SubSection = new Section {
MoreData = new MoreData { Text = "Hello!" }
}
};
// do something with section
}
这可能吗?我将在 ASP.NET 和 .exes 中使用它(将来可能还有其他东西),所以我不能只在static
某处存储一个或线程本地引用。
它不需要完全像上面那样,只是一种我不必将上下文传递给我创建的每个对象的方式。我考虑过使用扩展方法,context.createSomeData()
但它需要每个类更多的样板文件,并且实际上并没有更好,因为您仍然需要上下文对象。
理想情况下应该在 VS2008/.NET3.5 下工作,尽管如果有任何方法可以做到这一点,我仍然会感兴趣。
更新:我最终通过将我的方法重构为以下解决了这个问题:
Section section = new Section {
Data1 = new SomeData { Value = 123 },
Data2 = new SomeOtherData { Foo = "bar" },
SubSection = new Section {
MoreData = new MoreData { Text = "Hello!" }
}
};
section.DoStuffWithContext(new Context());
虽然它可能不适用于所有人,但它可以满足我的需要。
如果有人对最初的问题提出一个好的解决方案,我会留下这个问题。