Autofac的简单使用

今天记录一下学习Autofac的过程。

之前对IoC与DI一直很迷糊,今天研究了前辈们的文章后,才对IoC和DI有了一个初步的了解。感谢前辈们的无私奉献!

文章地址:

依赖注入和控制反转的理解,写的太好了。       

【第二章】 IoC 之 2.1 IoC基础 ——跟我学Spring3

什么鬼?明明是记录Autofac的基本使用。。。

好吧,回到主题。

首先,构建好一个时间输出的程序:

public interface IOutput
{
    void Write(string content);
}
public class ConsoleOutput : IOutput
{
    public void Write(string content)
    {
        Console.WriteLine(content);
    }
}    
public interface IDateWrite
{
    void WriteDate();
}
public class TodayWrite : IDateWrite
{
    private IOutput _output;

    public TodayWrite(IOutput output)
    {
        this._output = output;
    }

    public void WriteDate()
    {
        this._output.Write(DateTime.Now.ToShortDateString());
    }
}    
class Program
{
    static void Main(string[] args)
    {
     //创建一个输出对象 ConsoleOutput consoleOutput
= new ConsoleOutput();
     //创建一个日期输出对象,并通过构造函数注入日期输出对象所依赖的输出对象 TodayWrite todayWrite
= new TodayWrite(consoleOutput);
     //执行输出日期方法 todayWrite.WriteDate(); Console.Read(); } }

以上是原始实现方式,现在看,它拥有一个合理的关于依赖关系的结构,那么开始搭配Autofac来一起使用吧。

首先,添加下Autofac的引用。

打开工具->选择NuGet包管理器->管理解决方案的NuGet程序包

安装后,不要忘记引用Autofac

using Autofac;

接下来重构下 Program 类

class Program
{
    private static IContainer Container { get; set; }

    static void Main(string[] args)
    {
        var builder = new ContainerBuilder();
        builder.RegisterType<ConsoleOutput>().As<IOutput>();
        builder.RegisterType<TodayWrite>().As<IDateWrite>();
        Container = builder.Build();
        WriteDate();
        Console.Read();
    }

    static void WriteDate()
    {
        using (ILifetimeScope scope = Container.BeginLifetimeScope())
        {
            var write = scope.Resolve<IDateWrite>();
            write.WriteDate();
        }
    }
}

最后贴上 Autofac 的文档地址 : Autofac

原文地址:https://www.cnblogs.com/lifuquan/p/7700670.html