当前位置:  开发笔记 > 编程语言 > 正文

使用Ninject(或其他一些容器)如何找出请求服务的类型?

如何解决《使用Ninject(或其他一些容器)如何找出请求服务的类型?》经验,为你挑选了1个好方法。



1> Nate Kohari..:

最简单的方法是创建一个ILogger接口:

public class ILogger : ILogger { }
public class GenericLogger : ILogger { ... }

然后依靠泛型类型推断来获得正确的类型.例如,在Ninject中,您需要以下绑定:

Bind(typeof(ILogger<>)).To(typeof(GenericLogger<>));

那么您的消费类型将如下所示:

public class FooService : IFooService {
  public FooService(ILogger logger) { ... }
}

如果您坚决反对该ILogger界面,您可以做一些更有创意的事情,比如自定义提供程序,它会读取IContext以确定父类型.

public class GenericLogger : ILogger {
  public class GenericLogger(Type type) { ... }
}

public class LoggerProvider : Provider {
  public override ILogger CreateInstance(IContext context) {
    return new GenericLogger(context.Target.Member.ReflectedType);
  }
}

然后消费类型将如下工作:

public class FooService : IFooService {
  public FooService(ILogger logger) { ... }
}

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有