簡體   English   中英

IoC和ASP.NET MVC控制器

[英]IoC and ASP.NET MVC Controllers

我應該按照這個方針做點什么嗎? 我正在考慮從BaseController繼承的所有控制器。 這是否打破了IoC的設計模式? 我還應該做些什么呢?

public class BaseController: Controller
{
    protected ICookieService CookieService {
        get {
            return ServiceResolver.Resolve<ICookieService>(new { HttpContext = HttpContext });
        }
    }
    protected IDateTimeService DateTimeService { 
        get {
            return ServiceResolver.Resolve<IDateTimeService>();
        }
    }
    protected ISettingsService SettingsService {
        get {
            return ServiceResolver.Resolve<ISettingsService>();
        }
    }

}

使用構造函數注入並讓controllerfactory為您注入它會更簡單。 如果可以的話,如果可以使用構造函數注入,請不要使用服務定位器(ServiceResolver)。

將控制器工廠添加到ASP MVC有一些信息

該鏈接顯示了如何使用StructureMap進行操作,看起來您正在使用Unity,但它應該很容易適應。

我假設您擁有的受保護接口是控制器的依賴項。 可以設置一個IoC容器來為您注入依賴項。 當然可以使用Castle Windsor。 您需要將BaseController類更改為具有所需依賴項的構造函數,只要IoC容器知道它將能夠注入它們的其他服務。

控制反轉組件驅動開發背后的原則之一是僅在沒有其他方式時使用靜態服務定位器 (即:在Web服務主機或對象數據源中)。

從技術上講,使用靜態服務定位器,基本控制器不會違反IoC,它只是不使用它。

查看Autofac IoC容器和ASP.NET MVC之間的現有集成 (其他容器也應該能夠這樣做)。

暫無
暫無

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

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