C# 在驾驶室内,服务是否有自己的模块?
我正在学习复合应用程序块,我对服务有了深刻的认识。我在自己的解决方案中有我的shell应用程序,当然在自己的解决方案中有一个测试模块(完全独立于shell解决方案进行开发和测试)。如果我创建了一个名为“Sql服务”的服务,我是否需要将其放入自己的库中,以便shell和模块都知道类型 如果是这样的话,那么为了获得良好的实践效果,我应该将服务项目放在shell解决方案中,还是像一个模块(在它自己的解决方案中)一样放在外部,即使它没有作为模块加载 那么,推荐信呢?shell是否应该直接引用它,然后添加服务?或者将其作为模块加载并添加服务C# 在驾驶室内,服务是否有自己的模块?,c#,composite,cab,C#,Composite,Cab,我正在学习复合应用程序块,我对服务有了深刻的认识。我在自己的解决方案中有我的shell应用程序,当然在自己的解决方案中有一个测试模块(完全独立于shell解决方案进行开发和测试)。如果我创建了一个名为“Sql服务”的服务,我是否需要将其放入自己的库中,以便shell和模块都知道类型 如果是这样的话,那么为了获得良好的实践效果,我应该将服务项目放在shell解决方案中,还是像一个模块(在它自己的解决方案中)一样放在外部,即使它没有作为模块加载 那么,推荐信呢?shell是否应该直接引用它,然后添加
我应该在哪里创建我的服务?我应该引用还是作为模块加载?如果您有一个服务要公开给两个不同的程序集,那么您应该做的是在一个单独的程序集中定义该服务的接口,并在两个程序集中共享该接口。一般来说,我总是将服务放在它们自己的程序集(项目)中,并将这些服务的接口定义放在单独的程序集(项目)中 在CAB的特定情况下,除非是绝对必要的,否则我会避免将大部分内容暴露在Shell中——只有在Shell本身必须使用服务的情况下,我才会在Shell中引用它。外壳应该是裸露的骨头;它的存在使得模块可以向用户显示它们自己的元素。单个模块可能会担心引用和使用特定服务
就解决方案组织而言:通常,当我处理CAB应用程序时,所有内容都在一个解决方案中。我很少需要单独的解决方案。单独的项目,是的,但都在一个总括解决方案下 除了Chris的回答之外,shell了解您的服务的唯一方法是,如果您在shell中对您的服务具有服务依赖性,并且您已将该服务添加到根工作项中 因此,在shell中,您可以编写如下代码 私有ISqlService-sqlService [ServiceDependency Required=false] 公共ISqlService SqlService { 获取{return sqlService;} 设置{sqlService=value;} } 在SqlService类中(应从WorkItemController类继承) 你会有 _rootWorkItem.Services.AddNew()