[英]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.