Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在驾驶室内,服务是否有自己的模块?_C#_Composite_Cab - Fatal编程技术网

C# 在驾驶室内,服务是否有自己的模块?

C# 在驾驶室内,服务是否有自己的模块?,c#,composite,cab,C#,Composite,Cab,我正在学习复合应用程序块,我对服务有了深刻的认识。我在自己的解决方案中有我的shell应用程序,当然在自己的解决方案中有一个测试模块(完全独立于shell解决方案进行开发和测试)。如果我创建了一个名为“Sql服务”的服务,我是否需要将其放入自己的库中,以便shell和模块都知道类型 如果是这样的话,那么为了获得良好的实践效果,我应该将服务项目放在shell解决方案中,还是像一个模块(在它自己的解决方案中)一样放在外部,即使它没有作为模块加载 那么,推荐信呢?shell是否应该直接引用它,然后添加

我正在学习复合应用程序块,我对服务有了深刻的认识。我在自己的解决方案中有我的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()