注册在单个实例上具有显式实现的多个接口
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();
我正在使用 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();