gpt4 book ai didi

C# - Autofac 解析不同类中的新实例

转载 作者:行者123 更新时间:2023-12-03 20:27:38 25 4
gpt4 key购买 nike

刚开始使用 Autofac!我想在多个类中使用相同的 Logger 实例,但 Autofac 在不同的类中为我提供了一个新的 Logger 实例。

IocBuilder.cs

public static class IoCBuilder
{
public static IContainer Container()
{
var logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.Console(outputTemplate: outputTemplate)
.WriteTo.File("logs/log-.log",
outputTemplate: outputTemplate,
rollingInterval: RollingInterval.Day)
.CreateLogger();

// Container
var builder = new ContainerBuilder();
builder.RegisterInstance(logger).As<ILogger>().SingleInstance();
builder.RegisterType<MyOtherClass>().SingleInstance();

return builder.Build();
}
}

MyOtherClass.cs

public class MyOtherClass
{
public ILogger Logger {get; set; }
public MyOtherClass(ILogger logger)
{
Logger = logger;
}

public void FirstMethod()
{
Logger.Information("MyOtherClass- FirstMethod");
}

public void SecondMethod()
{
Logger.Information("MyOtherClass - SecondMethod");
}
}

Program.cs

public static IContainer Container
{
get { return IoCBuilder.Container(); }
}

static void Main(string[] args)
{
using (var scope = Container.BeginLifetimeScope())
{
var settings = Container.Resolve<ISettings>();
var logger = Container.Resolve<ILogger>();
logger.Information($"From program class: {settings.ToString()}"); // Prints log in log-20171217.log file

var myOtherClass = Container.Resolve<MyOtherClass>();
myOtherClass.FirstMethod(); // Prints log in log-20171217_1.log file
myOtherClass.SecondMethod(); // Prints log in log-20171217_1.log file
} // using scope
} // void main

Duplicate log files

我想在整个应用程序中使用 Logger 类的单个实例。非常感谢任何帮助!

最佳答案

问题是你在这里创建了一个新的容器实例:

public static IContainer Container
{
get { return IoCBuilder.Container(); }
}

每次您获得 Program.Container 的值时,您都会获得整个容器的一个新实例。容器的每个新实例都会创建一个新的记录器实例。

你必须在 Program 中缓存容器,像这样:

private static IContainer _container = IoCBuilder.Container();

public static IContainer Container
{
get { return _container; }
}

关于C# - Autofac 解析不同类中的新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47858251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com