【发布时间】:2012-02-27 04:10:01
【问题描述】:
我创建了一个启动 MVC 3 应用程序设置 ninject,并在构造函数中向控制器构造函数传递了 ModelStateDictionary 对象。这是来自 System.Web.Mvc 命名空间的对象。
使用隐式自绑定激活 ModelStateDictionary 时出错 ModelStateDictionary 在 两个服务的构造函数。
激活路径:3)依赖ModelStateDictionary注入 ModelStateDictionary 类型构造函数的参数字典 2) 将依赖 ModelStateDictionary 注入参数 modelDict HomeController 类型的构造函数 1) HomeController 的请求
我该如何解决这个问题?我如何以一种有效的方式抽象它?是否可以?我已经在 Stackoverflow 和 ninject.org 上进行了一些搜索……但看不到它在这里是如何应用的,因为我无法直接修改 ModelStateDictionary。
public class HomeController : Controller
{
private readonly ModelStateDictionary _modelDict;
public HomeController(ModelStateDictionary modelDict)
{
_modelDict = modelDict;
}
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View();
}
}
public void SetupDependencyInjection()
{
IKernel kernel = new StandardKernel();
//kernel.Bind<>().To<>();
DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
}
public class NinjectDependencyResolver : IDependencyResolver
{
private readonly IResolutionRoot _resolutionRoot;
public NinjectDependencyResolver(IResolutionRoot kernel)
{
_resolutionRoot = kernel;
}
public object GetService(Type serviceType)
{
return _resolutionRoot.TryGet(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return _resolutionRoot.GetAll(serviceType);
}
}
这是一个简单的例子,我没有在自己的代码中使用这种方式......但情况和理论是一样的。 ModelStateDictionary 应该是隐式自绑定的。 Ninject 选择接受 ModelStateDictionary 对象的构造函数,即使有一个不接受参数的构造函数。如果参数最多的构造函数不起作用,ninject不应该回退到没有参数的构造函数吗?
【问题讨论】:
-
Kevin Donde,你为什么将 ModelStateDictionary 作为参数传递给 Controller。我认为这是个坏主意。你想直接修改ModelStateDictionary做什么?
标签: asp.net-mvc-3 dependency-injection ninject