我正在开发一个ASP.Net应用程序,其中定义了几个MVC Areas。当我试图在Area中使用依赖注入控制器时,我会得到下面的错误。
No parameterless constructor defined for this object.我使用的是一个统一容器,它看起来注册的依赖项并没有将它添加到MVC Area中。
安装程序在global.asax.cs中非常典型
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(MyConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}为了在MVC区域控制器中注入依赖项,我是否还缺少其他步骤?
更多信息
这是地区注册班:
public class MyAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "MyArea";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"MyArea_default",
"MyArea/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}统一容器:
public static class MyConfig{
public static IUnityContainer dependencyResolver { get; set; }
public static void Register(HttpConfiguration config)
{
// Create Unity container
var container = new UnityContainer();
// Register service types
container.RegisterType<ISomeService, SomeService>();
// omitted for brevity
// Create unity resolver
config.DependencyResolver = new UnityResolver(container);
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
dependencyResolver = container;
}区域主计长:
private ISomeServce SomeServce;
public LabController(ISomeServce someServce)
{
SomeServce = someServce;
}发布于 2016-01-05 18:55:11
Web和MVC是两件完全不同的事情。您最初的问题是您正在使用MVC,但您的DI配置只针对Web。
MVC (和区域)的配置
根据MSDN依赖注入教程,您缺少DI设置的一个重要部分--即您的Application_Start方法没有设置MVC来使用DI。它仅用于为Web配置DI。
您需要实现(或基于) IControllerFactory或IDependencyResolver,并在应用程序启动时将其设置为注入控制器依赖项。
ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory(container));
// Or...
DependencyResolver.SetResolver(new MyDependencyResolver(container));https://stackoverflow.com/questions/34618963
复制相似问题