注册在单个实例上具有显式实现的多个接口

Register multiple interfaces that has explicit implementation on a single instance

我正在使用 Autofac,我不是 IoC 高手。

考虑这种情况:

public interface IBeforeRequestTask
{
    void Execute();
}

public interface IAfterRequestTask
{
    void Execute();
}

public class TaskExecutor : IBeforeRequestTask, IAfterRequestTask
{
    void IBeforeRequestTask.Execute()
    {
        // code
    }

    void IAfterRequestTask.Execute()
    {
        // code
    }
}

所以,我们有明确的实施。 你会如何注册这些接口?

我认为我们不能这样做:

builder.RegisterType<IBeforeRequestTask> ...
builder.RegisterType<IAfterRequestTask> ...

我在 Autofac Registration Docs 中读到我们必须注册具体类型。
一个类似但不处理 Autofac 的问题是:TinyIoC: Register multiple interfaces on a single instance

好吧,我知道这可以通过 1-1 来轻松实现(每个 class 一个接口,然后注册具体类型)。但是现在我很好奇。
不记得我在哪里使用 StructureMap 看到类似下面的代码(可能是错误的):

action.AddTypesOf<IBeforeRequestTask>();
action.AddTypesOf<IAfterRequestTask>();

希望我说清楚了。谢谢大家

编辑
我创建了 this 示例来提供帮助。 ;-)

我不太确定你想要实现什么,但如果你想注册单个 class 以在两个接口下的容器中可用,并且你想要它的单个实例,你可以做到像这样。

builder.RegisterType<TaskExecutor>().As<IBeforeRequestTask>().As<IAfterRequestTask>().SingleInstance();