需求: 小明想要完成一个功能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); }