Autofac:替代实施,但注入旧的实现?

时间:2015-07-31 04:35:03

标签: c# dependency-injection autofac

我正在编写一个事件源应用程序。我有IEventStoreEventStore类实现。但是,在调试时,我希望将IEventStore实现为DebuggingEventStore类。

我可以在DebuggingEventStore的构造函数中以某种方式注入我的EventStore(旧实现)吗?我看过装饰器,但我不确定在这种情况下它是否是正确的方法。

之前

IEventStore已实施为EventStore

现在

调试时

IEventStore实现为DebuggingEventStore

我想要什么

DebuggingEventStore通过其构造函数注入旧IEventStoreEventStore)。

2 个答案:

答案 0 :(得分:2)

您可以实现DebuggingEventStore以在其构造函数中接收EventStore,该构造函数在构建iOS容器时被注入。

实际上,DebuggingEventStore将实现IEventStore并将EventStore作为构造函数参数。

PYTHONPATH=/path/to/app python ....

答案 1 :(得分:0)

如Nicholas Blumhardt所述here,在Autofac中注册(非通用)装饰器的典型方法如下:

builder.RegisterType<EventStore>()
    .Named<IEventStore>("implementor");

builder.RegisterDecorator<IEventStore>(
    (c, decoratee) => new DebuggingEventStore(decoratee),
    fromKey: "implementor");

但是说,我认为@ KnightFox的答案在注册非通用装饰器方面更加清晰:

builder.RegisterType<EventStore>().AsSelf();
builder.Register(c => new DebugingEventStore(c.Resolve<EventStore>()))
    .As<IEventStore>();