所以我现在有一个主DAO类ITrackingToolDAO,它拥有我的每个业务实体的所有服务合同。温莎WCF工厂?
public partial interface ITrackingToolDAO {
void Open(string connectionString);
void Close();
IBusinessFunctionDAO BusinessFunction { get; }
IBusinessUnitDAO BusinessUnit { get; }
IProgramBudgetDAO ProgramBudget { get; }
IProjectDAO Project { get; }
...
}
我的服务合同看起来像这样
[ServiceContract(Namespace="http://bmgops.qintra.com/Tracking/v1/BusinessFunction")]
public partial interface IBusinessFunctionDAO {
[OperationContract]
BusinessFunction GetBusinessFunction(Int32 businessFunctionId);
[OperationContract]
IEnumerable<BusinessFunction> Find(string filter);
[OperationContract]
SaveEventArgs<BusinessFunction>Save(BusinessFunction businessFunction);
}
目前,我有我的ITrackingToolDAO接口2个具体实现。 第一个是TrackingToolSqlDAO它为每个实体实例化一个具体的SQL DAO。即)BusinessFunctionSqlDAO,ProjectSqlDAO等
第二个是一个TrackingToolWCFDao这产生使用的ChannelFactory <Ť>创建用于我的所有成员DAO的实施WCF proxys。
现在,我想开始使用Windsor WCF工具而不是CreateChannel。什么是实现这一目标的最佳方式?
我想创建一个ITrackingToolDAO的虚拟实现,它在构造函数中使用了IKernel参数。
public class DummyDAO: ITrackingToolDAO {
public DummyDAO(IKernel kernel) {
_ProjectDAO = kernel.Resolve<IProject>();
....
}
}
这样我就可以使用WCF工具创建我所有的频道。我只是不喜欢它因为它使用容器作为服务定位器,这是一种代码味道。理想情况下,如果我可以在容器中注册我的SQL DAO和新的WCF DAo,我也会喜欢它,所以我可以通过引用它们的名称来创建任意一个。
有什么想法?