Я пытаюсь создать базовый конструктор DI с помощью Simple Injector, и кажется, что он не может разрешить зависимости для контроллеров Web API.
SimpleInjectorWebApiDependencyResolver
из документации, которая также совпадает с найденной здесь . Кажется, это не проблема, но я все еще получаю следующую ошибку:
Тип 'MyProject.API.ArticleController' не имеет конструктора по умолчанию
System.ArgumentException в
System.Linq.Expressions.Expression.New (тип type) в System.Web.Http.Internal.TypeActivator.Create [TBase] (тип instanceType) в System.Web.Http .Dispatcher. Был бы признателен, если бы кто-то мог предложить мне некоторые предложения, относительно того, должно ли что-либо быть изменено от его текущего состояния / порядка вызовов.
ArticleController (базовая структура):
public class ArticleController : ApiController { private readonly IArticleRepository articleRepository; private readonly IUserRepository userRepository; private readonly IReleaseRepository releaseRepository; public ArticleController(IArticleRepository articleRepository, IUserRepository userRepository, IReleaseRepository releaseRepository) { this.articleRepository = articleRepository; this.userRepository = userRepository; this.releaseRepository = releaseRepository; } // GET api/Article public IEnumerable
GetArticles(){ // code } // GET api/Article/5 public Article GetArticle(int id){ // code } // PUT api/Article/5 public HttpResponseMessage PutArticle(int id, Article article){ // code } // POST api/Article public HttpResponseMessage PostArticle(ArticleModel article){ // code } // DELETE api/Article/5 public HttpResponseMessage DeleteArticle(int id){ // code } } SimpleInjectorInitializer:
public static class SimpleInjectorInitializer { public static void Initialize() { var container = new Container(); InitializeContainer(container); container.RegisterMvcControllers(Assembly.GetExecutingAssembly()); container.RegisterMvcAttributeFilterProvider(); container.Verify(); DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container)); } private static void InitializeContainer(Container container) { container.Register
(); container.Register (); container.Register (); } } Global.asax.cs:
public class WebApiApplication : System.Web.HttpApplication { private void ConfigureApi() { // Create the container as usual. var container = new Container(); // Verify the container configuration // container.Verify(); // Register the dependency resolver. GlobalConfiguration.Configuration.DependencyResolver = new SimpleInjectorWebApiDependencyResolver(container); } protected void Application_Start() { AreaRegistration.RegisterAllAreas(); ConfigureApi(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } }