代码之家  ›  专栏  ›  技术社区  ›  Bubblewrap

如何全局地将数据添加到另一个dll中的静态类

c#
  •  1
  • Bubblewrap  · 技术社区  · 15 年前

    public static class MyStaticClass
    {
        private static readonly Dictionary<Type, object> data = new Dictionary<Type, object>();
    
        static MyStaticClass() { /*fill data here*/ }
    
        public static object GetData(Type type) { return data[type]; }
    
        public static void SetData(Type type, object o) { data[type] = o; }
    }
    

    项目B使用项目A。项目B也是一个库。 在项目B中,我不仅要将此类用于静态构造函数中添加的类型,还要用于在B中定义的类型及其依赖项。

    基本上在B的某个地方,我想有以下代码:

    MyStaticClass.SetData(typeof(TypeInB), new object());
    MyStaticClass.SetData(typeof(TypeInDllUsedByB), new object());
    

    在项目B中放置此代码的合适位置是什么? GetData 不必担心以前的代码是否已经执行过。

    我想把它放进去 static TypeInB()

    1 回复  |  直到 15 年前
        1
  •  2
  •   VinayC    15 年前

    在项目B中创建包装类,它将转发对项目A中存储库的调用,

    public static class MyStaticClassInB
    {
    
        static MyStaticClassInB() { /*fill data here*/ }
    
        public static object GetData(Type type) { return MyStaticClass.GetData(type); }
    
        public static void SetData(Type type, object o) { MyStaticClass.SetData(type, o); }
    }
    

    总是在项目B中使用MyStaticClassInB(而不是MyStaticClass)。现在,从B初始化类型的正确位置应该是这个类的静态构造函数。