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)
谁能帮我 ?
老帖子,但这些其他答案是错误的.我今天遇到这个问题,你肯定不需要注册控制器或控制器工厂.此消息仅表示控制器的依赖关系层次结构中的某些内容未注册.例如,如果您的控制器在其构造函数中需要IService,并且IService在其构造函数中需要IRepository,但您忘记注册IRepository,您将收到此错误.
您的 IDependencyResolver 实现要求注册 AccountController。尝试添加此注册,否则它将返回 null,并且 MVC 将尝试使用需要无参数构造函数的 Activator 创建控制器。
| 归档时间: |
|
| 查看次数: |
4633 次 |
| 最近记录: |