MVC 3 beta + Dependency Resolver + Unity =出了问题

drs*_*sim 5 c# dependency-injection unity-container asp.net-mvc-3

我试图在Unity中使用Dependency Resolver,当我的Controller创建时遇到了一些问题.这里控制器的例子:

public class AccountController : Controller
{
    private readonly ICourseService _courseService;

    public AccountController(ICourseService courseService)
    {
         _courseService = courseService;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当Controller尝试创建时 - 我得到了一个异常"没有为此对象定义无参数构造函数." 我甚至尝试为此控制器添加默认构造函数,但是courseService没有创建.还尝试使用[Dependency]属性添加属性 - 没有任何反应.这是Dependency Resolver类:

public class UnityDependencyResolver : IDependencyResolver
{
    private readonly IUnityContainer _container;
    public UnityDependencyResolver(IUnityContainer container)
    {
        _container = container;
    }

    public object GetService(Type serviceType)
    {
        return _container.IsRegistered(serviceType) ? _container.Resolve(serviceType) : null;
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        return _container.IsRegistered(serviceType) ? _container.ResolveAll(serviceType) : new List<object>();
    }
}
Run Code Online (Sandbox Code Playgroud)

和Global.asax.cs:

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);

        var container = new UnityContainer();
        container.RegisterType<ICourseService, CourseService>();

        DependencyResolver.SetResolver(new UnityDependencyResolver(container));
    }
Run Code Online (Sandbox Code Playgroud)

谁能帮我 ?

Dan*_*anH 5

老帖子,但这些其他答案是错误的.我今天遇到这个问题,你肯定不需要注册控制器或控制器工厂.此消息仅表示控制器的依赖关系层次结构中的某些内容未注册.例如,如果您的控制器在其构造函数中需要IService,并且IService在其构造函数中需要IRepository,但您忘记注册IRepository,您将收到此错误.


Rem*_*oor 2

您的 IDependencyResolver 实现要求注册 AccountController。尝试添加此注册,否则它将返回 null,并且 MVC 将尝试使用需要无参数构造函数的 Activator 创建控制器。