Einfache Injektor Nicht in der Lage zu Injizieren von Abhängigkeiten in der Web-API-Controller

Ich bin versucht zu tun, einige grundlegende Konstruktor DI mit Einfach Injektor, und es scheint, dass es nicht beheben können die Abhängigkeiten für Web-API-Controller.

  • Ich habe einen API-controller in einem "API" - Ordner, außerhalb der "Controller" - Ordner.
  • Ich habe auch versucht, indem Sie es in die "Controller" - Ordner, aber
    das schien nicht zu viel von einem Unterschied. Der stack-trace
    Ich erhalte ist ähnlich wie die vorgestellten in diese Frage.
  • Ich verwende eine frische Installation der "Einfache Injektor-MVC-Integration-Quick Start" NuGet-Paket - (v. 2.1.0).
  • Ich habe die base SimpleInjectorWebApiDependencyResolver aus der Dokumentation, die auch gleichzeitig als gefunden hier.
  • Ich bin mit Entity Framework, und habe mir die Diskussion
    thread
    über die änderungen ordnungsgemäß geladen Rahmen.

Diese nicht
scheint ein problem zu sein, aber ich habe immer die folgende Fehlermeldung:

Typ " MyProject.API.ArticleController' hat keinen Standardwert
Konstruktor

System.ArgumentException bei

System.Linq -.Ausdrücke.Ausdruck.Neue(Type Type) bei
System.Web.Http.Intern.TypeActivator.Erstellen[TBase](Typ
instanceType) bei
System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage
Anfrage, Type controllerType, Func`1& activator) an
System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Erstellen(HttpRequestMessage
Anfrage, HttpControllerDescriptor controllerDescriptor Geben
controllerType)

Es wäre schön, wenn jemand könnte mir einige Vorschläge, ob hier etwas geändert werden sollte, von seinem aktuellen Zustand/call um.

ArticleController (Grundstruktur):

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<Article> 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<IArticleRepository, ArticleRepository>();
        container.Register<IUserRepository, UserRepository>();
        container.Register<IReleaseRepository, ReleaseRepository>();
    }
}

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);
    }
}

InformationsquelleAutor der Frage user1417835 | 2013-04-09

Schreibe einen Kommentar