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对象…