[英]Resolving using Autofac within an object
我有以下课程:
public class MessagePublisher : IMessagePublisher
{
private readonly IComponentContext componentContext;
public MessagePublisher(IComponentContext componentContext)
{
this.componentContext = componentContext;
}
public void PublishMessage<T>(T message) where T : class
{
var messageConsumers = componentContext.Resolve<IEnumerable<IMessageConsumer<T>>>();
foreach (IMessageConsumer<T> messageConsumer in messageConsumers)
{
// Do some stuff.
}
}
}
}
这...行不通。 我从Autofac收到一个错误,指示我无法像我一样存储组件上下文,这很有意义。
此解析操作已经结束。 使用lambda注册组件时,无法存储IComponentContext'c'参数到lambda。 而是从'c'再次解析IComponentContext,或从基于Func <>的工厂解析以从中创建后续组件。
我完全明白为什么这行不通。 我想知道的是,是否还有另一种方法可以执行我要执行的操作,即在方法中解析类型(我无法通过构造函数将其传递,因为我不知道该类型在那时候)。 有任何想法吗? 谢谢你的帮助。
您可以这样做,但是您必须注册错误。 我猜你有类似...
builder.Register(c => new MessagePublisher(c));
但是你需要做
builder.Register(c => new MessagePublisher(c.Resolve<IComponentContext>()));
话虽这么说,让普通类直接访问您的DI位通常是一种反模式,但是有时某些管道/框架代码可能需要这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.