DependencyResolver的ASP.NET MVC功能

时间:2014-05-26 15:02:13

标签: c# asp.net-mvc

如果我创建自定义控制器工厂,在这种情况下这行代码意味着

DependencyResolver.Current.GetService

public class CustomControllerFactory : IControllerFactory
    {
        public IController CreateController(RequestContext requestContext, string controllerName)
        {
            Type targetType = null;

            switch (controllerName)
            {
                case "Product":
                    targetType = typeof(ProductController);
                    break;
                case "Customer":
                    targetType = typeof(CustomerController);
                    break;
                default:
                    requestContext.RouteData.Values["controller"] = "Product";
                    targetType = typeof(ProductController);
                    break;
            }

            return targetType == null ? null :
            (IController)DependencyResolver.Current.GetService(targetType); // what this means here ?
        }

2 个答案:

答案 0 :(得分:1)

该行表示程序员希望当前依赖项解析程序解析指定类型的服务。

如果您的解析器设置正确,它将返回您指定类型的实例。

您也可以使用通用版本来避免强制转换。

此外,我建议不要使用魔术字符串,而是使用枚举或其他强值。

答案 1 :(得分:1)

这意味着当前依赖项解析器应该解析targetType的依赖性。它本身就是Service Locator design pattern的实现。

要设置依赖项解析器,您应该在DependencyResolver.SetResolver(myResolver)

中使用Application_Start