如何在PCL中可靠地从其他程序集初始化c#静态成员

本文关键字:其他 程序集 初始化 静态成员 PCL | 更新日期: 2023-09-27 18:08:52

我正在编写一组代码,其中包含了PCL中的大部分功能。我想初始化像

这样的成员
class CentralInPCL {
  public static Func<string> DefaultPathProvider;

这需要从为平台之一构建的程序集中分配一个lambda () => Path.GetTempFileName()

如何在另一个程序集中可靠地分配这个lambda ?

我能保证在使用任何CentralInPCL实例之前,在另一个程序集中运行helper类的静态构造函数吗?

我可能完全误解了PCL的工作原理,但我们正在努力避免用户代码必须向PCL传递参数。

据我所知,PCL是一个叶子库,由平台特定的程序集调用。

您通常会通过注入对象或lambda来让它访问平台内容,通常是确认到PCL中定义的接口。

然而,这个注入过程是显式的,必须在一些特定于平台的代码中出现,通常是用户代码。

我想在用户不知道的情况下添加一些默认值。

如何在PCL中可靠地从其他程序集初始化c#静态成员

2005年Jon Skeet的一个老答案表明你做不到,至少在当时是这样。

我找到了一个用Fody做这件事的方法,在一个模块初始化器中编织,这是一个在c#中无法声明的东西。

如果做不到这一点,我们需要要求用户包含一个调用来设置静态默认值