1

我们一直使用温莎城堡作为我们的 DI 容器,但我们正在寻找替代品。现在我使用了 Simple Injector,到目前为止,它的简单性给我留下了深刻的印象,但我现在遇到的一种情况是,当我们对某些组件使用后期绑定实例化时。

我的第一个问题是,这有可能吗?

温莎就是这样完成的;

Container.Register(Component.For<ILogger>()
    .UsingFactoryMethod(
        (kernel, componentModel, context) => new Logger(
            context.Handler.ComponentModel.Implementation.Name));

有没有办法用简单的注射器做同样的事情?

4

1 回答 1

2

使用 Simple Injector,您只需:

  1. 使用显式注册 Func 委托Register<Func<A, B, C>>((a, b) => { ... })
  2. 创建一个接口,例如ILoggerFactory,创建一个实现并注册它们。

更新

在再次阅读您的问题并查找 Castle's 的定义后UsingFactoryMethod,我得出的结论是我误解了您的问题。您正在寻找的是基于其父类型创建一个实例:基于上下文的注入

您可以通过实现基于上下文的注入扩展方法来实现这一点,该方法在 Simple Injector 的文档 wiki 上作为示例给出。

当您将此扩展方法添加到您的项目时,您可以按如下方式进行等效注册:

container.RegisterWithContext<ILogger>(context =>
{
    return new Logger(context.ImplementationType.Name);
});
于 2012-12-03T19:06:17.573 回答