繁体   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