最简单的方法是创建一个ILogger
接口:
public class ILogger: ILogger { } public class GenericLogger : ILogger { ... }
然后依靠泛型类型推断来获得正确的类型.例如,在Ninject中,您需要以下绑定:
Bind(typeof(ILogger<>)).To(typeof(GenericLogger<>));
那么您的消费类型将如下所示:
public class FooService : IFooService { public FooService(ILoggerlogger) { ... } }
如果您坚决反对该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) { ... } }