【问题标题】:Application design, global image collection应用程序设计,全球图像采集
【发布时间】:2012-03-01 18:20:14
【问题描述】:

我们有一个应用程序,类似于结构化的 n 层,但我不会说它是 n 层的。 最顶层的表单 /AKA MainForm/ 连接到数据库并获取可用模块的列表,根据该列表它开始加载不同的模块。每个模块都是一个单独的项目,有 1 个从抽象类派生的顶级类,所有模块都从该类派生。

如此等等,到目前为止,我们的一切运行良好,传递连接字符串、模块和主应用程序之间的对话框。

下一步是实现每个模块要使用的全局图标库,关键是每个模块应该能够将自己的图像加载到它。

我正在考虑一个全局静态类,它返回当前运行的 ImageList 类实例。我不知道从哪里开始,所以任何人都可以提供一个可以静态使用而无需声明或传递它的全局类的示例吗?有可能吗?

编辑:
改写尝试:理想情况下,每个单独的模块都能够插入资源的全局资源,如果存在图像,每个模块都能够从中获取图像。我什至不知道从哪里开始或寻找什么。

编辑 2:

刚刚检查过:
有 3 个项目:1 个主要项目、1 个子项目、1 个中间项目
主要参考文献
中间的子引用

1 main 启动并在“中间”加载一些字符串时调用静态方法。使用反射“main”实例加载child.dll并使用反射实例化对象,然后调用子obj上“inbetween”接口中定义的方法,然后调用“inbetween”上的静态方法,然后“main” " 打印静态“中间”中的所有字符串。它有效!我就像WTF?我猜反射结合了两个“中间”

【问题讨论】:

    标签: c# architecture .net-4.0 application-design


    【解决方案1】:

    一种简单的方法是拥有一个每个模块都可以引用的共享库。所以每个模块都会知道共享库提供的类的存在。然后,您可以在该共享库中有一个类来管理您的图像。

    为了让它更优雅,我会研究像 Unity 这样的依赖注入框架。让共享库(基础设施库)保存一个接口的定义来管理图像。然后有一个实现该特定接口的模块,然后在统一容器中注册该实现器。所以每个模块都会通过统一容器来解析接口。

    这样每个模块都不会与实现接口的模块紧密耦合,而只是与只包含接口定义的共享库。

    【讨论】:

    • 我是一个初学者,我以前从未听说过依赖注入,感谢您阐明这个概念。我正在研究它
    【解决方案2】:
    public static class Foo
    {
        public static int Bar()
        {
            return 1;
        }
    
        public static void AddImage(Image img, String key){...}
        public static Image GetImage(String key){...}
    }
    

    【讨论】:

    • 是的,鉴于我提供的信息,我想这已经足够了。但我的目标是每个模块将自己的图像加载到图像集合/库中,并且应用程序的其他层能够访问它们
    • 这真的有用吗?我想知道,让不同的项目访问该类会导致静态类中有多个实例,我错了吗?想象 2 个不同的项目,1 个动态加载另一个,这意味着每个分别引用 Foo 类导致 2 个不同的静态 Foo 实例
    • 我想鉴于我的情况,除了拥有一个全局实例并将其传递给模块之外,我别无选择。
    • 静态 = 每个应用程序唯一。不管你有多少项目。
    • 即使项目动态加载另一个?
    【解决方案3】:

    那么,你的意思是你需要一个“模块静态”(行为像线程静态但针对模块)方法?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      相关资源
      最近更新 更多