【问题标题】:How to use Unity in order to implement a simple component publishing engine如何使用 Unity 实现一个简单的组件发布引擎
【发布时间】:2010-07-16 22:19:33
【问题描述】:

在我们的项目中,我们实现了一个简单的工具,让一方发布动态组件,而其他方 - 使用它们。我想逐步淘汰我们的内部实施,并准备好现成的东西。由于我们的 UI 人员已经使用 Caliburn+Prism+Unity,因此我决定使用 Unity(拥有两个不同的 IoC 容器实现似乎很奇怪)。

为了这个问题,以下是玩家:

  1. 实体类型(AB
  2. 实体工厂(FactoryAFactoryB
  3. 实体管理器 (Manager)
  4. 客户

截至目前,Manager 具有 RegisterFactory(IFactory) API,这是注册新实体类型的唯一方法 - 必须通过新的实体工厂实例调用它。

但是,客户端对此方法的显式调用很少见,因为Manager 运行我们的内部引擎,该引擎检查特定文件夹中的所有程序集并加载那些声明特定程序集级别属性的程序集。该属性指定特定实体工厂的类型,以便引擎可以实例化它(使用Activator.CreateInstance)并调用RegisterFactory API。

此外,引擎会监控文件夹并知道动态加载新程序集。

例如,如果 C 是在程序集 Foo.dll 中实现的新实体类型,则程序集应具有如下所示的程序集级别属性:

[assembly: PublishEntity(typeof(FactoryC))]

然后将 Foo.dll 放在该特殊文件夹中会导致引擎:

  1. 检查它并在那里找到相关的程序集级属性实例
  2. 使用反射创建一个新的FactoryC 实例
  3. 调用Manager.RegisterFactory,将FactoryC 实例作为参数传递。

重点是我希望使用 Unity 来实现相同的功能。

有什么想法吗?

谢谢。

编辑

需要 Manager 和 Factory 类型。我有兴趣消除的是临时注册工具——属性、RegisterFactory 方法和扫描文件夹并加载相关程序集的引擎。现在我意识到 Unity 可能还不够。我有兴趣了解可以满足我们需求的免费解决方案。我只是希望使用众所周知且经过测试的东西,最好是渴望成为标准的东西。

【问题讨论】:

    标签: .net unity-container ioc-container


    【解决方案1】:

    Unity 需要类型配置,无论是在应用配置中还是在运行时构建。您当前的引擎通过进行装配探测来增加价值。 Unity 只是不这样做。

    我看到 Unity 服务的唯一目的是通过允许客户端使用 Unity 解析实体(和工厂?)来替换您的 Manager 和可能的 Factory 类。您可以继续允许您的引擎使用它找到的程序集热配置 Unity。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 2012-02-10
      • 2012-09-19
      • 2017-10-06
      相关资源
      最近更新 更多