今天記錄一下學習Autofac的過程。 之前對IoC與DI一直很迷糊,今天研究了前輩們的文章後,才對IoC和DI有了一個初步的瞭解。感謝前輩們的無私奉獻! 文章地址: 依賴註入和控制反轉的理解,寫的太好了。 【第二章】 IoC 之 2.1 IoC基礎 ——跟我學Spring3 什麼鬼?明明是記錄Au ...
今天記錄一下學習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