【发布时间】:2011-11-26 14:33:15
【问题描述】:
在我开始之前,我必须说我可能咬得比我能咀嚼的多,但我正处于绝望的学习狂潮中,我需要很多帮助。
我正在编写一个练习,从两本书中抽取样本:
1. .Net 中的依赖注入,作者:Mark Seemann
2. Brian Egan 和 Steve Valenzuela 的专业 ASP .Net 设计模式
练习使用 WCF 作为服务层实现请求/响应消息传递模式AND 使用来自客户端应用程序中的组合根的依赖注入。
从 2 开始:
在练习中,对于服务层,我有五个类库:
- 合同:带有服务合同的接口。
- 数据契约:所有用 DataContractAttribute
装饰的对象
- HttpHost:WCF 服务的主机。此库包含所有 svc 文件
- ServiceProxy:此库手动实现服务的代理以供客户端使用
- 服务:包含服务的实现。
从 1:
我想用控制台和 ASP .Net MVC 客户端测试这个练习,因此组合根是第一个的 Main 方法和 Global.asax 和第二个的自定义控制器工厂组合。
所以我的问题是:
- 如果组合根是在客户端上实现的,我是否必须为 WCF 中的 ServiceHostFactory、ServiceHost 和 IInstanceProvider 提供自定义实现?那不是让我有两个作文根源吗?
- 如果(希望)我只需要客户端中的组合根,我应该在哪里创建具有依赖关系的构造函数?在服务的实现中或在服务的代理中还是在两者中?
- 应该如何配置对象层次结构?我想首先使用Poor Man's DI,并且一旦运行将Structure Map 合并为IoC 容器。
非常感谢您的帮助。
这是我到目前为止的代码(我不包括服务合同或数据合同):
服务实现:
namespace Exercise.Services
{
public class PurchaseOrderService : IPurchaseOrderService
{
private readonly IPurchaseOrderFacade PurchaseOrderFacade;
public PurchaseOrderService(IPurchaseOrderFacade purchaseOrderFacade)
{
PurchaseOrderFacade = purchaseOrderFacade;
}
public PurchaseOrderResponse CreatePurchaseOrder(PurchaseOrderRequest purchaseOrderRequest)
{
var purchaseOrder = PurchaseOrderFacade.CreatePurchaseOrder(purchaseOrderRequest.ToPurchaseOrder());
var purchaseOrderResponse = purchaseOrder.ToPurchaseOrderResponse();
purchaseOrderResponse.IsSuccessful = true;
return purchaseOrderResponse;
}
public PurchaseOrderResponse UpdateState(PurchaseOrderRequest purchaseOrderRequest)
{
var purchaseOrder = PurchaseOrderFacade.UpdateState(purchaseOrderRequest.ToPurchaseOrder());
var purchaseOrderResponse = purchaseOrder.ToPurchaseOrderResponse();
purchaseOrderResponse.IsSuccessful = true;
return purchaseOrderResponse;
}
}
}
这是客户端的代理:
namespace Exercise.ServiceProxy
{
public class PurchaseOrderProxy : ClientBase<IPurchaseOrderService>, IPurchaseOrderService
{
public PurchaseOrderResponse CreatePurchaseOrder(PurchaseOrderRequest purchaseOrderRequest)
{
return base.Channel.CreatePurchaseOrder(purchaseOrderRequest);
}
public PurchaseOrderResponse UpdateState(PurchaseOrderRequest purchaseOrderRequest)
{
return base.Channel.UpdateState(purchaseOrderRequest);
}
}
}
【问题讨论】:
-
+1 表示面临挑战。你能把标题中的“no”改成“on”吗?
-
@GertArnold:感谢您注意到错字:)
-
相关:因为谷歌搜索“WCF 组合根”导致这里和有用的答案被埋葬谁知道在哪个页面上:stackoverflow.com/questions/2454850/…
标签: c# wcf dependency-injection structuremap