2012-12-20 99 views
1

我有一個服務對象,對特定患者做一些工作。如何使用ninject注入會話對象屬性?

public class PatientDxService 
{ 
    public Patient Patient { get; set; } 

    public PatientDxService(Patient patient) 
    { 
     this.Patient = patient; 
    } 
} 

我的服務需要一個Patient對象,如上所示。

我有一個SessionManager對象有一個屬性來獲得會話患者。我想注射病人。

Bind<PatientDxService>().ToConstructor(x => new PatientDxService(x.Inject<ISessionManager>().Patient)); 

Bind<ISessionManager>().To<SessionManager>().InSingletonScope(); 

上述不適用於我。我真的不想注入ISessionManager,因爲如果我想使用Web範圍之外的服務,這是沒有意義的。

回答

0

將ISessionManager注入您的服務而不是患者。然後在構造函數中(或者更好的是,實際使用Patient的地方),請求會話中的Patient。

public class PatientDxService 
{ 
    private readonly ISessionManager _session; 

    public PatientDxService(ISessionManager session) 
    { 
     this._session = session; 
    } 

    public void DoStuff() 
    { 
     var patient = _session.GetPatient(); 
     ... 
    } 
} 
+0

我試圖避免會話依賴性,使服務可以在Web範圍之外重用,而無需更改它。也許我的整個方法是錯誤的。 –

+0

在這種情況下,你可以用一個更抽象的Facade封裝'ISessionManager',比如'IPersonAccessor',它只有'GetPatient()'方法。這種方式使用服務的人可以定義如何訪問患者。 –

+0

一般我試圖堅持注入服務的概念,而不是模型。如果一個類需要一個模型,注入可以提供它的服務。 –