2011-01-14 68 views
1

在我們的ASP.NET項目中,我們有一個會話管理器服務接口,用於查找有關當前用戶的信息。例如:根據額外參數創建WCF服務的依賴關係

var actorId = _sessionManager.CurrentActivePerson.PersonId; 

此會話管理器通過基於構造函數的依賴注入提供給類。

現在,我們有一個WCF服務,我們願與視情況不同DI綁定實例:

  • 如果消費者提供會話的用戶名,我們想用一個會話認爲用戶是當前人的經理。
  • 否則,我們想要以某種方式要求提供域ID,請使用綁定到該域的系統人員的會話管理器。

爲了使其正常工作,我們需要允許消費者提供域ID作爲參數,儘管它沒有被指定爲服務本身的參數。然後,我們需要能夠在HostFactory創建服務實例時從DI綁定方法訪問此參數。

有沒有人對我們如何做到這一點有任何建議?

注:

  • 我已經知道如何創建通常依賴綁定:問題是關於通過這個額外的參數到服務的工廠。
  • WCF服務作爲SOAP端點公開,並使用基於證書的安全性。
+0

你是詢問如何注入東西到服務,或到調用該服務的客戶端? – 2011-01-14 20:51:03

回答

2

這聽起來對我來說是一個認證/授權問題不僅僅是DI問題。如果是這種情況,最正確的低級解決方案實際上是implement a custom token

這是一個非常複雜的任務,所以您應該認真考慮切換到基於聲明的授權Windows Identity Foundation提供了很多工具來做到這一點。

這意味着,而不是管理兩個根本不同的安全上下文(用戶名與域ID),您外部化身份管理,讓你不必應付這樣的橫切關注點內應用程序代碼。這會給你一個更好的分離問題

但是,如果您真的需要推遲依賴的解決方案,直到實際的方法調用,the universal solution is to inject an abstract factory

以防萬一你需要了解如何使構造器注入爲WCF信,這裏的如何:Injecting data to a WCF service