如何返回基于使用简单注射器其父一个实例?(How to return an instance bas

2019-10-17 11:27发布

我们一直在使用温莎城堡作为我们的DI容器,但我们正在四处寻找替代品。 现在我到了简单的注射器,到目前为止我已经被它的简单印象深刻,但是当我们使用后期绑定的实例为我们的一些组件的一个场景,我停留在现在的问题是。

我的第一个问题是,它甚至有可能?

随着温莎它像这样做;

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

有没有办法做简单的注射器一样的吗?

Answer 1:

与简单的喷油器,你就只能之一:

  1. 寄存器明确使用函数求委托Register<Func<A, B, C>>((a, b) => { ... })
  2. 创建一个接口,如ILoggerFactory ,creste实现并注册。

UPDATE

重读你的问题,查找城堡的定义后UsingFactoryMethod我来,我误解你的问题的结论。 你所寻找的是创建一个基于其父类型的实例: 基于上下文注入 。

您可以通过执行实现这一基于上下文的注入延伸方法被给出作为例子在简单的喷油器的文档网站。

当您添加此扩展方法到你的项目,你可以做等同登记如下:

container.RegisterWithContext<ILogger>(context =>
{
    return new Logger(context.ImplementationType.Name);
});


文章来源: How to return an instance based on its parent using Simple Injector?