在Autofac中的lambda注册期间访问上下文信息?

礼来

使用Ninject,我可以执行以下操作:

Bind<ILogger>().ToMethod(context =>
{
    // Get type info
    var type = context.Request.Target.Member.DeclaringType;
    var logger = new ConcreteLogger(type);

    Kernel.Get<IFoo>().DoFoo(logger);
    return logger;
});

如何使用Autofac做到这一点?

这是我的代码:

 builder.Register(context => {
      var type = ?????
      var logger = new ConcreteLogger(type);

      context.Resolve<IFoo>().DoSomething(logger);
      return logger;
 }).As<ILogger>();

我可以在调试器中看到context实际上是Autofac.Core.Resolving.InstanceLookup具有成员的类型ComponentRegistration.Target但是由于InstanceLookup属于内部类,所以无法访问它

看来我可以做到这一点,但并没有为我提供需要这种注入类型的类的类型信息:

 builder.Register(context => {
     var lookup = c as IInstanceLookup;
     var target = lookup.ComponentRegistration.Target as ComponentRegistration;
     var logger = new ConcreteLogger(target.Activator.LimitType);

      context.Resolve<IFoo>().DoSomething(logger);
      return logger;
 }).As<ILogger>();
西里尔·杜兰德

您需要的是基于“父”组件注入一个组件。使用Autofac,您可以注册组件,而这些组件并不知道谁需要它们。

顺便说一句,您可以通过实现自定义Module来完成所需的操作范例:

public class TestModule : Module
{
    protected override void AttachToComponentRegistration(
        IComponentRegistry componentRegistry,
        IComponentRegistration registration)
    {
        registration.Preparing += (sender, e) =>
        {
            Parameter parameter = new ResolvedParameter(
                (pi, c) =>
                {
                    return pi.ParameterType == typeof(ILogger);
                }, (pi, c) =>
                {
                    var p = new TypedParameter(typeof(Type), 
                                               e.Component.Activator.LimitType);
                    return c.Resolve<ILogger>(p);
                });

            e.Parameters = e.Parameters.Union(new Parameter[] { parameter });
        };
        base.AttachToComponentRegistration(componentRegistry, registration);
    }
}

并像这样注册模块:

builder.RegisterModule<TestModule>();

这样,每次解析一个组件时,它将添加一个新参数,该参数知道要构造的类型以创建ILogger依赖项。

请注意,通过执行此操作,您可能会拥有专属的依赖关系:一种为组件构建但用于另一个组件的依赖关系。如果您的ILogger注册具有不同的范围,例如单例范围,则可能会发生这种情况

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Java

如何访问上下文库[MVVM]

来自分类Java

访问上下文中Dockerfile外

来自分类Dev

杜松子酒设置和从中间件访问上下文值

来自分类Dev

没有http.Request的访问上下文

来自分类Java

如何在Kotlin中访问上下文对象中的变量?

来自分类Javascript

访问上下文状态时出现迭代器错误

来自分类Dev

我可以通过Django视图在Decorator中访问上下文对象吗

来自分类Java

通过在异步gridview中单击图像来防止访问上下文操作菜单时重新加载活动

来自分类Dev

如何在拦截器中访问上下文?

来自分类Dev

如何通过工作单元访问上下文中的方法?

来自分类Dev

React Child组件无法访问上下文API

来自分类Dev

托管服务中的访问上下文

来自分类Dev

从useEffect访问上下文

来自分类Dev

如何在Gatsby的模板组件中访问上下文变量?

来自分类Dev

在ExchangeFilterFunction内部访问上下文

来自分类Dev

vue + nuxt js-如何在服务器端的插件中访问上下文?

来自分类Dev

在Javascript HTML中的Django视图中访问上下文变量(列表)

来自分类Dev

如何使用Kleisli在调用链的每个函数中访问上下文?

来自分类Dev

从中访问上下文

来自分类Dev

我无法在react.createContext()中访问上下文的功能

来自分类Dev

在上下文种子期间同步注册用户

来自分类Dev

可以访问上下文的Jinja扩展

来自分类Dev

Xtext ScopeProvider:访问上下文对象会导致错误

来自分类Dev

ReactJS:从基本组件访问上下文

来自分类Dev

访问其他文件中的Lambda上下文对象

来自分类Dev

如何访问上下文消费者中的道具

来自分类Dev

Flutter:如何从 Dismissible onDismissed 访问上下文

来自分类Dev

Django:在 POST 和 GET 中访问上下文数据

来自分类Dev

可访问上下文数据的折叠索引函子

Related 相关文章

  1. 1

    如何访问上下文库[MVVM]

  2. 2

    访问上下文中Dockerfile外

  3. 3

    杜松子酒设置和从中间件访问上下文值

  4. 4

    没有http.Request的访问上下文

  5. 5

    如何在Kotlin中访问上下文对象中的变量?

  6. 6

    访问上下文状态时出现迭代器错误

  7. 7

    我可以通过Django视图在Decorator中访问上下文对象吗

  8. 8

    通过在异步gridview中单击图像来防止访问上下文操作菜单时重新加载活动

  9. 9

    如何在拦截器中访问上下文?

  10. 10

    如何通过工作单元访问上下文中的方法?

  11. 11

    React Child组件无法访问上下文API

  12. 12

    托管服务中的访问上下文

  13. 13

    从useEffect访问上下文

  14. 14

    如何在Gatsby的模板组件中访问上下文变量?

  15. 15

    在ExchangeFilterFunction内部访问上下文

  16. 16

    vue + nuxt js-如何在服务器端的插件中访问上下文?

  17. 17

    在Javascript HTML中的Django视图中访问上下文变量(列表)

  18. 18

    如何使用Kleisli在调用链的每个函数中访问上下文?

  19. 19

    从中访问上下文

  20. 20

    我无法在react.createContext()中访问上下文的功能

  21. 21

    在上下文种子期间同步注册用户

  22. 22

    可以访问上下文的Jinja扩展

  23. 23

    Xtext ScopeProvider:访问上下文对象会导致错误

  24. 24

    ReactJS:从基本组件访问上下文

  25. 25

    访问其他文件中的Lambda上下文对象

  26. 26

    如何访问上下文消费者中的道具

  27. 27

    Flutter:如何从 Dismissible onDismissed 访问上下文

  28. 28

    Django:在 POST 和 GET 中访问上下文数据

  29. 29

    可访问上下文数据的折叠索引函子

热门标签

归档