【发布时间】:2017-12-22 23:15:13
【问题描述】:
为什么我在 Employee Controller 上收到此错误,其余的工作正常 这是我的员工控制器
public class EmployeeController : ApiController
{
#region Call service
private readonly IEmployeeServices _employeeServices;
public EmployeeController(IEmployeeServices employeeServices)
{
_employeeServices = employeeServices;
}
readonly IEmployeeServices employeeServices = new EmployeeServices();
public EmployeeController():base()
{
_employeeServices = employeeServices;
}
}
这是我完美的工作产品控制器
public class ProductController : ApiController
{
#region Call service
private readonly IProductServices _productServices;
public ProductController(IProductServices productServices)
{
_productServices = productServices;
}
readonly IProductServices productServices = new ProductServices();
public ProductController()
{
_productServices = productServices;
}
}
这是堆栈跟踪
发生错误。尝试创建类型为“EmployeeController”的控制器时发生错误。确保控制器在 System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) 处具有无参数的公共构造函数。System.InvalidOperationException 在 System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage 请求) 在 System.Web.Http.Dispatcher.HttpControllerDispatcher.
d__1.MoveNext() 发生错误。依赖项解析失败,type = "TheWork.Controllers.EmployeeController", name = "(none)"。 异常发生时:解决时。 异常是: InvalidOperationException - 当前类型 BusinessServices.IEmployeeServices 是一个接口,无法构造。您是否缺少类型映射? ----------------------------------------------------------- 在异常发生时,容器是: 解决 TheWork.Controllers.EmployeeController,(none) 解析构造函数 TheWork.Controllers.EmployeeController(BusinessServices.IEmployeeServicesemployeeServices) 的参数“employeeServices” 解决 BusinessServices.IEmployeeServices,(无) Microsoft.Practices.Unity.ResolutionFailedException 在 Microsoft.Practices.Unity.UnityContainer.DoBuildUp(类型 t,现有对象,字符串名称,IEnumerable 1 resolverOverrides)
 at Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name, ResolverOverride[] resolverOverrides)
 at Microsoft.Practices.Unity.UnityContainerExtensions.Resolve(IUnityContainer container, Type t, ResolverOverride[] overrides)
 at Unity.WebApi.UnityDependencyScope.GetService(Type serviceType)
 at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func1& 激活器) 在 System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)出现错误。当前类型BusinessServices.IEmployeeServices是接口,无法构造。您是否缺少类型映射?Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.ThrowForAttemptingToConstructInterface(IBuilderContext context) 处的 System.InvalidOperationException 在 lambda_method(闭包,IBuilderContext) 在 Microsoft.Practices.ObjectBuilder2.DynamicBuildPlanGenerationContext.c__DisplayClass1.b__0(IBuilderContext 上下文) 在 Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext 上下文) 在 Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext 上下文) 在 Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext 上下文) 在 Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp(NamedTypeBuildKey newBuildKey) 在 Microsoft.Practices.Unity.ObjectBuilder.NamedTypeDependencyResolverPolicy.Resolve(IBuilderContext 上下文) 在 lambda_method(闭包,IBuilderContext) 在 Microsoft.Practices.ObjectBuilder2.DynamicBuildPlanGenerationContext.c__DisplayClass1. b__0(IBuilderContext 上下文) 在 Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext 上下文) 在 Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext 上下文) 在 Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext 上下文) 在 Microsoft.Practices.Unity.UnityContainer.DoBuildUp(类型 t,现有对象,字符串名称,IEnumerable`1 resolverOverrides)
更新
这里是 Unity 配置
public static class UnityConfig
{
public static void RegisterComponents()
{
var container = new UnityContainer();
System.Web.Mvc.DependencyResolver.SetResolver(new UnityDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
RegisterTypes(container);
}
public static void RegisterTypes(IUnityContainer container)
{
ComponentLoader.LoadContainer(container, ".\\bin", "TheWork.dll");
ComponentLoader.LoadContainer(container, ".\\bin", "BusinessServices.dll");
ComponentLoader.LoadContainer(container, ".\\bin", "DataModel.dll");
}
}
【问题讨论】:
-
你的统一配置是什么样的?
-
@ChrisBint Chris 我添加了 Config 类请看问题的更新部分
标签: c# .net asp.net-mvc asp.net-web-api unity-container