gpt4 book ai didi

c# - 传递上下文对象的替代方法

转载 作者:行者123 更新时间:2023-11-30 16:16:15 24 4
gpt4 key购买 nike

我有一个上下文对象,我希望能够从大量不同的类中访问它。我的代码看起来像

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(以及 future 可能的其他东西)中使用它,所以我不能只在某处存储 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());

虽然它可能不适合所有人,但它可以满足我的需要。

如果有人想出一个很好的解决方案来解决最初的问题,我会留下这个问题。

最佳答案

您可以定义一个静态方法 Context.RetreiveData(),但您不必在方法本身内部实现任何样板代码。

使用命令模式,每个特定的项目类型都可以为 RetreiveData() 方法提供自己的实现。 ASP.NET 项目可以提供一种从 Session 中检索数据的方法。 WinForm 可执行文件可以提供一种方法,可以从某个全局变量中检索数据。还有一个项目可以提供一种从数据库中检索数据的方法。

关于c# - 传递上下文对象的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18613979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com