相关疑难解决方法(0)

是否可以在AutoFac中获取容器类型

例如,我在类型的构造函数中使用一个参数注册了类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)

c# dependency-injection autofac

6
推荐指数
1
解决办法
999
查看次数

使用Autofac的RegisterGeneric注入NLog

注意:更新了建议的改进,更接近但仍然不完全!

与此问题类似 - 使用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)

c# nlog autofac

6
推荐指数
1
解决办法
5523
查看次数

标签 统计

autofac ×2

c# ×2

dependency-injection ×1

nlog ×1