2012-04-24 83 views
1

我有我的業務層,實體和DTOS在名爲CCL.Data試圖揭露我的服務層WCF

一個separeted組裝問題:

我所有的應用程序直接引用服務層使用接口和IoC。

例如,我在我的CCL.Data組件中有一個名爲ICustomerService的接口,它依賴於取決於MyContext的ICustomerRepository。我的所有應用程序都引用ICustomerService來調用它的方法.......迄今沒有問題。

所以我創建了一個WCF工程....在這個項目中引用CCL.Data ....

我創建了一個新的服務,但低於詮釋這種情況下,我需要改變所有的點在我將ICustomerService調用到WCFCustomerServiceClient的應用程序是否存在一個更好的方法,而不會對我的項目產生重大影響?

 

    [ServiceContract] 
    public interface IWCFCustomerService 
    { 
     [OperationContract] 
     CustomerDTO GetCustomerById(int id); 
    } 

    public class WCFCustomerService : IWCFCustomerService 
    { 
     ICustomerService _customerService; 
     public WCFCustomerService() 
     { 
      MyContext context = new MyContext(); 
      ICustomerRepository customerRep = new CustomerRepository(context); 
      _customerService = new CustomerService(customerRep); 
     } 

     public CustomerDTO GetCustomerById(int id) 
     { 
      return _customerService.GetCustomerById(id); 
     } 

    } 


韓國社交協會, 威廉

+0

我會這麼做的。我不會喜歡我的程序集取決於System.ServiceModel ....但我沒有選擇.....謝謝 – will 2012-04-24 15:32:30

+0

我已轉貼評論作爲答案,因爲它似乎有幫助! – Ricibob 2012-04-24 15:57:06

回答

0

你需要重新定義IWCFCustomerService到位ICustomerService的?難道只是將ServiceContract屬性添加到原始ICustomerService接口(它們只會被非WCF代碼忽略)嗎? (其確實,這確實會給你對ServiceModel的依賴 - 但我看不出有辦法)。

另請注意,如果您使用ServiceRefernce生成代理代碼,則生成的代碼將在不同名稱空間中包含您的服務接口以供客戶端使用。值得注意的是,你不能使用該版本的界面(如果你有代理而不是代理implimentation,這可能很煩人),但仍可以使用org接口定義,無論是從dll還是編譯到客戶端。