2017-06-07 3 views
0

Ich habe Serviceregistrierte Badly generischen Typen mit Autofac

public class CircleProfileService : CircleService<ICircleProfileInput, ICircleProfileOutput, ICircleProfile>, ICircleProfileService 
{ 
     public CircleProfileService(ICircleProfileQueryBuilder queryBuilder, 
              ICircleQueryProcessor queryProcessor, 
              ICircleParser<ICircleProfile> parser) 
      : base(queryBuilder, queryProcessor, parser) 
     { 
     } 
     ... other methods 
} 

Wie man sehen kann ich versuchen, generische Art von meinem Parser zu injizieren.

public interface ICircleParser<out TOutput> where TOutput : ICircleParsedOutput 
{ 
     IEnumerable<TOutput> Parse(string json); 
} 

public class CircleParser<TOutput> : ICircleParser<TOutput> where TOutput: ICircleParsedOutput, new() 
//new() is only one option to make project buildable as jsonParser want non-abstract type... 
    { 
     private readonly IJsonParser jsonParser; 

     public CircleParser(IJsonParser jsonParser) 
     { 
      this.jsonParser = jsonParser; 
     } 

     public IEnumerable<TOutput> Parse(string json) 
     { 
      return jsonParser.Parse<TOutput>(json); 
     } 
    } 

Und hier ist, wie ich meine generische Typen (alles wie in Autofac Dokumentation) registrieren

builder.RegisterGeneric(typeof(CircleParser<>)).As(typeof(ICircleParser<>)); 

Aber das wirft immer Ausnahme, die nicht Parser injizieren ...

Was soll ich tun falsch?


Fehler:

Autofac.Core.DependencyResolutionException: Keiner der Konstrukteure mit 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' vom Typ ‚gefunden MyProj.Services.DataServices.Circle.CircleProfileService 'kann mit den verfügbaren Diensten und Parametern aufgerufen werden: Parameter kann nicht aufgelöst werden' MyProj.Services.DataServices.Circle.Parers.Interfaces.ICircleParser 1[MyProj.Services.DataServices.Circle.Outputs.Interfaces.ICircleProfile] parser' of constructor 'Void .ctor(MyProj.Services.DataServices.Circle.QueryBuilders.Interfaces.ICircleProfileQueryBuilder, MyProj.Services.DataServices.Circle.QueryProcessors.Interfaces.ICircleQueryProcessor, MyProj.Services.DataServices.Circle.Parsers.Interfaces.ICircleParser 1 [MyProj.Services.DataServices.Circle.Outputs.Interfaces.ICircleProfile]) '.

+0

einspritzen kann, können Sie die Ausnahmemitteilung in der Frage auflisten? –

+0

@MikeCorcoran, getan – demo

+0

der Fehler scheint ziemlich klar. Autofac kann keine Implementierung einer Klasse finden, die 'ICircleParser ' implementiert. Sie haben den offenen generischen 'ICircleParser' registriert, aber Sie benötigen immer noch etwas, das den resultierenden Typ implementiert, den Sie für die Autofac-Lösung anfordern möchten. –

Antwort

0

Ich kann nicht kommentieren, um zu rep, also bin ich gezwungen, einen Beitrag zu machen.

Haben Sie eine Bindung für IJsonParser? Wenn nicht, müssen Sie eins hinzufügen, damit Autofac eine Implementierung davon in CircleParser

Verwandte Themen