Api Controller具有无参数的公共构造函数错误

我使用Unity来做我的DI,我遇到了以下错误: –

“尝试创建’UploadController’类型的控制器时发生错误。确保控制器具有无参数的公共构造函数。”

我有以下UnityResolver: –

public class UnityResolver : IDependencyResolver, IDependencyScope, System.Web.Http.Dependencies.IDependencyResolver { protected IUnityContainer container; public UnityResolver(IUnityContainer container) { if (container == null) { throw new ArgumentNullException("container"); } this.container = container; } public object GetService(Type serviceType) { try { return container.Resolve(serviceType); } catch (ResolutionFailedException) { return null; } } public IEnumerable GetServices(Type serviceType) { try { return container.ResolveAll(serviceType); } catch (ResolutionFailedException) { return new List(); } } public IDependencyScope BeginScope() { var child = container.CreateChildContainer(); return new UnityResolver(child); } public void Dispose() { container.Dispose(); } } 

}

我创建了一个UnityConfig如下: –

 public static class UnityConfig { public static void RegisterComponents() { var container = new UnityContainer(); // register all your components with the container here // it is NOT necessary to register your controllers // eg container.RegisterType(); BuildUnityContainer(); GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container); } private static IUnityContainer BuildUnityContainer() { var container = new UnityContainer(); // register all your components with the container here // you don't need to register controllers container.RegisterType(); container.RegisterType(); container.RegisterType(); container.RegisterType(); container.RegisterType(); container.RegisterType(); container.RegisterType(); container.RegisterType(); container.RegisterType(); container.RegisterType<UserManager>(new HierarchicalLifetimeManager()); container.RegisterType<IUserStore, UserStore>(new HierarchicalLifetimeManager()); return container; } } 

}

我正在初始化WebApiConfig.cs中的每一个

  public static void Register(HttpConfiguration config) { // Web API configuration and services // Configure Web API to use only bearer token authentication. config.SuppressDefaultHostAuthentication(); config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); // Web API configuration and services var container = new UnityContainer(); UnityConfig.RegisterComponents(); config.DependencyResolver = new UnityResolver(container); config.EnableCors(); // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } } 

这是我的UploadController类: –

  public class UploadController : ApiController { private readonly IFileHelpers _fileHelpers; private readonly IDatabaseHelper _databaseHelper; private readonly IPlayersHelpers _playersHelpers; public UploadController(IFileHelpers fileHelpers, IDatabaseHelper databaseHelper, IPlayersHelpers playersHelpers) { _fileHelpers = fileHelpers; _databaseHelper = databaseHelper; _playersHelpers = playersHelpers; } public async Task Post() {........................} 

能否帮我确定一下我做错了什么? 我是否需要声明其他内容才能使用?

谢谢你的帮助和时间

在Register方法中,您有以下代码:

 // ... // Web API configuration and services var container = new UnityContainer(); UnityConfig.RegisterComponents(); config.DependencyResolver = new UnityResolver(container); 

但是,该容器没有注册。 在静态UnityConfig类中创建了一个单独的容器(带注册),但该容器未传递给UnityResolver对象…