我遇到了在Autofac中注册IRequest和IRequestHandler接口的问题。以下代码可以正常工作:
现在我想让它更加灵活,避免注册所有使用接口的类。
我尝试了这个但没成功:
有什么想法吗?
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()
替换为AsClosedTypesOf(typeof(IRequestHandler<>))
。 - Mickaël Derriey