簡體   English   中英

ASP.NET模塊依賴項注入

[英]ASP.NET Module Dependency Injection

在為我們的某些產品設計新的通用身份驗證框架時,我遇到了一個架構問題,我似乎找不到合適的解決方案。

我試圖簡化問題以便於解釋。

該庫有兩個類:

經理負責存儲當前已驗證的用戶。

模塊模塊負責根據安全策略驗證每個請求。 模塊必須要求管理員確定用戶當前是否已通過身份驗證。

現在,為管理器提供了接口的實現,該接口允許管理器從存儲庫加載用戶。 該庫中不包含特定的實現。 因此,我無法直接實例化庫中的存儲庫實例。

我無法修改屬性或為模塊構造函數提供參數。 所以我的問題是,如何給模塊提供對Manager實例的引用?

namespace Demo
{
    public interface IRepository
    {
        object GetUser(int id);
    }

public class Manager { public IRepository Repository { get; private set; } public Manager(IRepository repository) { this.Repository = repository; } } public class Module : IHttpModule { // How can i access an instance of the manager class here // when I am unable to instantiate an instance of // of an implementation of the IRepository interface. }

}

在經典的ASP.NET中,我更喜歡在HttpApplicationGlobal )上實現一個接口,該接口聲明必要的依賴關系。 這里是IHasManager (該應用程序是由lolcats編寫的):

public class Module: IHttpModule {
    Manager manager;
    public void Init(HttpApplication context) {
        IHasManager application = context as IHasManager;
        if (application != null) {
            manager = application.Manager;
        }
    }
}

一種最簡單(如果很難看)的方法是在創建實例后將Manager實例填充到應用程序字典中:

HttpContext.Current.Application["Demo.Manager"] = new Manager(new Repository());

現在,您可以通過以下方式在模塊中訪問它:

var manager = HttpContext.Current.Application["Demo.Manager"] as Manager;

看看這個。

認為它應該做您需要的

http://ninject.org/

暫無
暫無

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

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