繁体   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