2017-10-13 9 views
1

Autofac et MediatR en cours d'utilisation. Je suis en train d'enregistrer gestionnaire dans ContainerBuilder, mais il est toujours l'erreurGestionnaire de registre dans autofac

instanciation type d'implémentation 'DataSourceHandler`2 [TEntity, TModel]' pour le type de service « MediatR.IRequestHandler'2 [DataSourceQuery'2 [ TEntity, TModel], Kendo.Mvc.UI.DataSourceResult] »

Ma Recherche:

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

passe a tenté d'enregistrer de différentes manières comme:

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

mais il ne fonctionne pas.

Que dois-je faire?

+0

Voir l'exemple sur la façon d'enregistrer le mediatR avec autofac: https://github.com/jbogard/MediatR/blob/master/samples/MediatR.Examples.Autofac/Program.cs – 12seconds

+0

Cela ne marche pas non plus. Je m'inscris dans Startup.cs: services.AddMediatR(); –

Répondre

1

Le message d'erreur que vous avez publié semble indiquer que le type DataSourceHandler<TEntity, TModel> est correctement enregistré en tant que IRequestHandler<DataSourceQuery<TEntity, TModel>, DataSourceResult>, car le message contient le nom du type.

Il semblerait qu'il ne puisse pas être instancié. Puisque la seule dépendance de ce type est ApplicationDbContext, pouvez-vous vérifier que vous avez enregistré ce type dans le constructeur de conteneur?