簡體   English   中英

溫莎WCF設施工廠?

[英]Windsor WCF Facility factory?

因此,我目前擁有一個主DAO類ITrackingToolDAO,該類具有我每個業務實體的所有服務合同。

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);
}

我目前有2個ITrackingToolDAO接口的具體實現。 第一個是TrackingToolSqlDAO ,它為每個實體實例化一個具體的SQL DAO。 即) BusinessFunctionSqlDAOProjectSqlDAO等。

第二個是TrackingToolWCFDao ,它使用ChannelFactory <T>創建WCF代理,以為我的所有DAO成員創建一個實現。

現在,我想開始使用Windsor WCF工具而不是CreateChannel。 做到這一點的最佳方法是什么?

我正在考慮創建ITrackingToolDAO的虛擬實現,該實現在構造函數中使用了IKernel參數。

public class DummyDAO: ITrackingToolDAO {
    public DummyDAO(IKernel kernel) {
        _ProjectDAO = kernel.Resolve<IProject>();
        ....
    }
}

這樣,我可以使用WCF工具創建所有頻道。 我只是不喜歡它,因為它使用容器作為服務定位器,這是一種代碼味道。 理想情況下,如果我可以將我的SQL DAO和新的WCF DAo都注冊在容器中,那么我也很喜歡,因此我可以通過僅按名稱引用來創建它們之一。

有什么想法嗎 ?

如果您使用的是Castle.Facilities.WcfIntegration,則可以這樣設置dao:

container.Register(Component.For<IProject>().ImplementedBy<Project>());

然后可以像這樣使用WcfIntegration工具:

container.AddFacility<WcfFacility>()
    .Register(Castle.MicroKernel.Registration.Component.For<IBusinessFunctionDAO>()
    .ImplementedBy<BusinessFunctionDAO>()
    .AsWcfService());

比於BusinessFunctionDAO,您可以像下面這樣進行構造函數注入:

public class BusinessFunctionDAO : IBusinessFunctionDAO 
{
   public BusinessFunctionDAO(IProject project)
   {
      if (project== null) new ArgumentException("project");
      _project = project;
   }
...


   private readonly IProject _project;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM