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

时间:2016-02-05 13:48:41

标签: dependency-injection autofac ioc-container

我使用的是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(每个类一个接口,然后注册具体类型)很容易。但现在我很好奇 不要记得我在使用StructureMap看到类似下面代码的地方(可能是错误的):

action.AddTypesOf<IBeforeRequestTask>();
action.AddTypesOf<IAfterRequestTask>();
希望我明白自己。谢谢大家。

修改
我创建了this样本来帮助。 ; - )

1 个答案:

答案 0 :(得分:1)

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

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