2017-10-13 5 views
1

Autofac und MediatR im Einsatz. Ich versuche Handler in ContainerBuilder zu registrieren, aber es wird immer FehlerRegister Handler in Autofac

kann nicht Implementierungstyp 'DataSourceHandler`2 [TEntity, TModel]' für Service-Typ ‚MediatR.IRequestHandler'2 [DataSourceQuery'2 instanziiert [ TEntity, TModel], Kendo.Mvc.UI.DataSourceResult]

Meine Suche:

public class DataSourceQuery<TEntity, TModel> : IRequest<DataSourceResult> 
     where TEntity : class, IEntityBase 
     where TModel : class 
    { 
     public DataSourceRequest Request { get; set; } 
    } 

Handler:

public class DataSourceHandler<TEntity, TModel> : IRequestHandler<DataSourceQuery<TEntity, TModel>, DataSourceResult> 
     where TEntity : class, IEntityBase 
     where TModel : class 
    { 
     private readonly ApplicationDbContext context; 

     public DataSourceHandler(ApplicationDbContext context) 
     { 
      this.context = context; 
     } 

     public DataSourceResult Handle(DataSourceQuery<TEntity, TModel> message) 
     { 
      return context.Set<TEntity>() 
       .ProjectTo<TModel>() 
       .ToDataSourceResult(message.Request); 
     } 
    } 

`ve versucht, es auf verschiedene Weise wie zu registrieren:

builder.RegisterGeneric(typeof(DataSourceHandler<,>)).As(typeof(IRequestHandler<,>)) 
       .AsImplementedInterfaces(); 

     builder.RegisterGeneric(typeof(DataSourceHandler<,>)).As(typeof(IRequestHandler<,>)) 
      .InstancePerDependency(); 

     builder.RegisterAssemblyTypes(typeof(DataSourceHandler<,>).GetTypeInfo().Assembly) 
      .AsClosedTypesOf(typeof(DataSourceHandler<,>)).AsImplementedInterfaces(); 

     builder.RegisterGeneric(typeof(DataSourceHandler<,>)) 
      .As(typeof(IRequestHandler<,>)); 

     builder.RegisterAssemblyTypes(typeof(DataSourceHandler<,>).GetTypeInfo().Assembly) 
      .AsClosedTypesOf(typeof(IRequestHandler<,>)); 

aber es funktioniert nicht.

Was soll ich tun?

+0

Sehen Sie sich das Beispiel zur Registrierung des mediatR mit Autofac an: https://github.com/jbogard/Mediatr/blob/master/samples/Mediatr.Examples.Autofac/Program.cs – 12seconds

+0

Es funktioniert auch nicht. Ich registriere in Startup.cs: services.AddMediatr(); –

Antwort

1

Die von Ihnen angegebene Fehlermeldung scheint anzuzeigen, dass der DataSourceHandler<TEntity, TModel>-Typ korrekt als IRequestHandler<DataSourceQuery<TEntity, TModel>, DataSourceResult> registriert ist, da die Nachricht den Namen des Typs enthält.

Es scheint jedoch, dass es nicht instanziiert werden kann. Da die einzige Abhängigkeit dieses Typs ApplicationDbContext ist, können Sie überprüfen, ob Sie diesen Typ im Container Builder registriert haben?