簡體   English   中英

在對象內使用Autofac進行解析

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM