在CAB中是一个服务自己的模块?

时间:2009-08-10 16:40:14

标签: c# composite cab

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

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

然后,参考怎么样?如果shell直接引用它,添加然后添加服务?或者将其作为模块加载并添加服务?

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

2 个答案:

答案 0 :(得分:1)

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

在CAB的特定情况下,除非绝对必要,否则我会避免向Shell公开任何内容 - 只有在Shell本身必须使用该服务时才会在Shell中引用它。壳牌应该是赤裸裸的;它存在,以便模块可以向用户显示自己的元素。各个模块可能会担心引用和使用特定服务。

就解决方案组织而言:通常,当我在CAB应用程序上工作时,一切都在一个解决方案中。我很少需要单独的解决方案。单独的项目,是的 - 但都在一个伞下的解决方案。

答案 1 :(得分:0)

除了Chris的回答之外,你的shell了解你的服务的唯一方法就是你的服务的shell中有服务依赖,并且你已经将服务添加到你的根工作项。

所以在shell中你会得到类似

的代码

私有ISqlService sqlService;

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

在SqlService类中(应该从WorkItemController类继承) 你会有像

这样的东西

_rootWorkItem.Services.AddNew();