今天记录一下学习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