例如,我在类型的构造函数中使用一个参数注册了类C1 System.Type.我有另一个类(C2),注入参数类型为C1.我希望typeof(C2)在C1构造函数中自动接收.有可能吗?
示例代码:
public class C1
{
public C1(Type type) {}
// ...
}
public class C2
{
public C2(C1 c1) {}
// ...
}
// Registration
containerBuilder.Register(???);
containerBuilder.Register<C2>();
Run Code Online (Sandbox Code Playgroud) 注意:更新了建议的改进,更接近但仍然不完全!
与此问题类似 - 使用Autofac传递NLog的声明类的类型 - 我试图将NLog实例注入我的存储库类.
接口:
public interface ILogger<T>
where T: class
{
...
}
Run Code Online (Sandbox Code Playgroud)
执行:
public class NLogger<T> : ILogger<T>
where T: class
{
private readonly Logger _logger;
public NLogger()
{
_logger = LogManager.GetLogger(typeof(T).FullName);
}
public void Debug(string message)
{
_logger.Debug(message);
}
...
}
Run Code Online (Sandbox Code Playgroud)
在Autofac注册为:
builder.RegisterGeneric(typeof (NLogger<>)).As(typeof (ILogger<>));
Run Code Online (Sandbox Code Playgroud)
使用断点,我看到Autofac正在创建一堆ILogger/NLogger,其中包含所有各种存储库的正确类型,但生成的日志显示为callsite为"NLog.LoggerImpl.Write".
谢谢你的帮助!
使用泛型的工作解决方案:
public class NLogger<T> : ILogger<T>
where T: class
{
private readonly Logger _logger;
public NLogger()
{
_logger = LogManager.GetLogger(typeof(T).FullName);
}
public void Debug(string message)
{
_logger.Log(typeof(T), new …Run Code Online (Sandbox Code Playgroud)