Autofac是一個輕量級的依賴注入的框架,同類型的框架還有Spring.NET,Unity,Castle等。
Autofac的使用有一個非常讓人郁悶的地方,就是服務器要求安裝有Microsoft .NET Framework 4 KB2468871。該補丁的地址是:http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=3556 如果不安裝,則運行程序會報如下錯誤:

具體信息可以到這里去查看:https://code.google.com/p/autofac/wiki/FrequentlyAskedQuestions
這篇文章以一個最簡單的例子,開始Autofac的學習:
namespace ConsoleApplication3 { class Program { static void Main(string[] args) { ContainerBuilder builder = new ContainerBuilder(); builder.RegisterType<AutoFacManager>(); builder.RegisterType<Worker>().As<IPerson>(); using (IContainer container = builder.Build()) { AutoFacManager manager = container.Resolve<AutoFacManager>(); manager.Say(); } Console.ReadKey(); } } public interface IPerson { void Say(); } public class Worker : IPerson { public void Say() { Console.WriteLine("我是一個工人!"); } } public class Student : IPerson { public void Say() { Console.WriteLine("我是一個學生!"); } } public class AutoFacManager { IPerson person; public AutoFacManager(IPerson MyPerson) { person = MyPerson; } public void Say() { person.Say(); } } }
以上例子,是一個最簡單的例子,輸出如下:

簡單解釋:
1、ContainerBuilder類型的作用
組件通過ContainerBuilder的對象注冊。
2、組件
對象需要從組件中來獲取,比如例子中的Worker類的實例就需要從組件中獲取。
3、哪些實例可以作為組件
- Lambda表達式
- 一個類型
- 一個預編譯的實例
- 實例類型所在的程序集
4、容器
ContainerBuilder的Build()方法可以創建容易,從容器的Resolve()方法能夠獲得對象。
5、為了指定組件服務是某一接口
As()方法將用於注冊時之指定:builder.RegisterTye<TaskController>().As<TController>();
6、組件的依賴關系
組件的依賴關系主要通過接口實現,如Worker:IPerson
