Autofac如何实现复杂依赖注入的简单配置?

摘要:今天记录一下学习Autofac的过程。 之前对IoC与DI一直很迷糊,今天研究了前辈们的文章后,才对IoC和DI有了一个初步的了解。感谢前辈们的无私奉献! 文章地址: 依赖注入和控制反转的理解,写的太好了。 【第二章】 IoC 之 2.1
今天记录一下学习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