У меня возникли проблемы с регистрацией интерфейса IRequest и IRequestHandler с Autofac. Этот код работает:Интерфейс регистра Autofac MediatR
var builder = new ContainerBuilder();
builder.RegisterAssemblyTypes(typeof(IMediator).GetTypeInfo().Assembly).AsImplementedInterfaces();
builder.RegisterAssemblyTypes(typeof(Ping).GetTypeInfo().Assembly).AsImplementedInterfaces();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
Теперь я хочу, чтобы сделать это более гибким, чтобы избежать того, чтобы зарегистрировать все классы, используемые интерфейсы.
Я пытался это без удачи:
builder.RegisterGeneric(typeof(IRequest<>)).AsImplementedInterfaces();
builder.RegisterGeneric(typeof(IRequestHandler<,>)).AsImplementedInterfaces();
Это мой Ping класс:
public class Ping : IRequest<Pong>
{
public string Message { get; set; }
}
public class Pong
{
public string Message { get; set; }
}
public class PingHandler : IRequestHandler<Ping, Pong>
{
public Pong Handle(Ping message)
{
return new Pong { Message = message.Message + " Pong" };
}
}
Любые идеи?
, так как 'IRequest' живет в сборке MediatR, нет никакой возможности, чтобы первая регистрация выбрала что-нибудь интересное. Кроме того, вы можете заменить '.Where (t => t.IsClosedTypeOf (typeof (IRequestHandler <>))). AsImplementedInterfaces()' by 'AsClosedTypesOf (typeof (IRequestHandler <>))'. –