所以我現在有一個主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,我也會喜歡它,所以我可以通過引用它們的名稱來創建任意一個。
有什麼想法?