首页 > 技术文章 > MVC 依赖注入扩展

pengzhen 2014-06-14 16:39 原文

     需求: 小明想要完成一个功能F,需要一把锤子T。

     有两种办法可以实现:

    1)小明很爱动手,精力很旺盛,于是,自己创建一个具有功能F的锤子T,并使用T来完成F;

    2)小明很懒,天天睡大觉,于是,他叫小健买了一把具有功能F的锤子T,并且还交代小健必须亲自送到他的手上(够懒吧?),他才使用T来完成F。

 

    是的,第一种方式就是动不动就new的;而第二种方式就是DI的一个解释。

   

    而MVC中的DI,没有多大的复杂,仍然也是OCP原则的体现。

    MVC框架设计的万能步骤:1)实现;2)注册。

 

1. 实现IDependencyResolver接口

public class MvcDependencyResolver : IDependencyResolver
{
    public object GetService(Type serviceType)
    {
        return SomeContainer.Resolve(serviceType);
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        var type = typeof(IEnumerable<>).MakeGenericType(serviceType);
        return (IEnumerable<object>)SomeContainer.Resolve(type);
    }
}

2.Gloabal中注册Resolver

protected void Application_Start()
{

    var dependencyResolver = new MvcDependencyResolver();
    DependencyResolver.SetResolver(dependencyResolver);

    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

推荐阅读