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

刚开始使用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

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

我想在整个应用程序中使用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; }
}

在Java中,如何找到将双n乘以n的幂。等效于Python中的Math.log - java

我想在Java中的Python中找到Math.log的等效项。基本上,double 'n'会提高多少幂才能达到完整的double 'n'。示例(100, 10)返回2。因为,将10提升到第二幂以达到100。27, 3返回:3。49, 7返回2。等等。有谁知道这在Java中是什么。 参考方案 在Python中,您可以使用…

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制

LeetCode题解统计城市的所有灯泡

这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…

LeetCode题解黑白圆盘

一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?题解:可以用一个相机即可

LeetCode题解圆上任取三点构成锐角三角形的概率

来自字节跳动的一道几何题题解:1/4