0

我正在学习复合应用程序块,并且我对服务很感兴趣。我的 shell 应用程序在它自己的解决方案中,当然还有一个测试模块在它自己的解决方案中(开发和测试完全独立于 shell 解决方案之外)。如果我创建了一个名为“Sql Service”的服务,我是否需要将它放在它自己的库中,以便 shell 和模块都知道类型?

如果是这种情况,那么为了良好的实践,我应该将服务项目放在 shell 解决方案中,还是像模块一样放在外部(在它自己的解决方案中),即使它没有作为模块加载?

那么,参考文献呢?shell是否应该直接引用它,添加然后添加服务?还是将其作为模块加载并添加服务?

我应该在哪里创建我的服务?我应该引用还是作为模块加载?

4

2 回答 2

1

如果您有一个服务要公开给两个不同的程序集,那么您应该在单独的程序集中为该服务定义接口并在两者之间共享该接口。一般来说,我总是将服务放在它们自己的程序集(项目)中,并将这些服务的接口定义放在单独的程序集(项目)中。

在 CAB 的特定情况下,除非绝对必要,否则我会避免向 Shell 公开任何东西——只有当 Shell 本身必须使用该服务时,我才会在 Shell 中引用它。外壳应该是准系统;它的存在是为了让模块可以向用户展示它们自己的元素。各个模块可能会担心引用和使用特定服务。

至于解决方案组织:通常,当我在处理 CAB 应用程序时,一切都在一个解决方案中。我很少需要单独的解决方案。是的,单独的项目 - 但都在一个总括解决方案下。

于 2009-12-17T22:36:13.073 回答
0

除了 Chris 的回答之外,您的 shell 了解您的服务的唯一方法是,您的服务的 shell 中是否存在服务依赖项,并且您已将该服务添加到您的根工作项中。

所以在shell中你会有类似的代码

私有 ISqlService sqlService;

[ServiceDependency required=false] public ISqlService SqlService { get { return sqlService; } 设置 { sqlService = 值;} }

在 SqlService 类(应该从 WorkItemController 类继承)中,您将拥有类似

_rootWorkItem.Services.AddNew();

于 2010-08-26T02:23:41.137 回答