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

Dependency injection 注册在单个实例上具有显式实现的多个接口,dependency-injection,autofac,ioc-container,Dependency Injection,Autofac,Ioc Container,我使用的是Autofac,我不是国际奥委会的大师 考虑以下情况: public interface IBeforeRequestTask { void Execute(); } public interface IAfterRequestTask { void Execute(); } public class TaskExecutor : IBeforeRequestTask, IAfterRequestTask { void IBeforeRequestTask.

我使用的是Autofac,我不是国际奥委会的大师

考虑以下情况:

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> ...
builder.RegisterType。。。
builder.RegisterType。。。
我在报纸上读到,我们必须注册具体类型。
以下是一个类似的问题,但不涉及Autofac:

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

action.AddTypesOf();
action.AddTypesOf();
希望我说清楚。谢谢大家

编辑

我创建了示例以提供帮助。;-)

我不太确定您想要实现什么,但是如果您想在容器中的两个接口下注册一个可用的类,并且希望有一个实例,您可以这样做

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

我不太明白这个问题。无论成员是在实际类型中隐式实现还是显式实现,使用接口访问成员的方式都是相同的。你是否观察到了差异,或者这是一个积极主动的“让我们在开始做之前解决这个问题”类型的问题?请看,其中的共识是“不,他们不应该”!谢谢@Andreasniedermir…:-)-做得好。我学会了+1用于教授提问的正确方式(我只阅读键入问题时出现的内容,类似的问题等等)。@LasseV.Karlsen您可以在github上克隆该示例。;-)谢谢。实际上它很管用!我的实现是错误的!非常感谢。
builder.RegisterType<TaskExecutor>().As<IBeforeRequestTask>().As<IAfterRequestTask>().SingleInstance();