1、在控制台執行指令安裝Autofac元件
Install-Package Autofac
Install-Package Autofac.Mvc5 -Version 4.0.2
using Autofac.Integration.Mvc; //注冊控制器時會用到
2、定義IAutoInject、ISendMessage接口及其實作類
public interface IAutoInject { }
public interface ISendMessage : IAutoInject { string SendMessage(); }
public class Phone : ISendMessage { }
public class Email : ISendMessage { }
3、添加Autofac配置項并初始化
a、在App_Start檔案夾中添加AutofacConfig.cs,并在其中添加初始化方法
b、在Global.asax檔案下的Application_Start()内調用AutofacConfig.Initialize();進行注冊
public static void Initialize()
{
var builder = new ContainerBuilder();
//擷取IAutoInject的Type
var iautoInject = typeof(IAutoInject);
//擷取ISendMessage的Type
var isendMessage = typeof(ISendMessage);
//擷取所有程式集
var assemblies = System.Web.Compilation.BuildManager.GetReferencedAssemblies().Cast<Assembly>().ToArray();
//擷取某程式集
//Assembly[] assemblies = new Assembly[]
//{
// Assembly.Load("AutofacDemo.Web"),
// Assembly.Load("AutofacDemo.Models")
//};
//自動注冊接口
builder.RegisterAssemblyTypes(assemblies)
.Where(b => b.GetInterfaces().Any(c => c == iautoInject && b != iautoInject))
.AsImplementedInterfaces().InstancePerLifetimeScope();
builder.RegisterAssemblyTypes(assemblies)
.Where(b => b.GetInterfaces().Any(c => c == isendMessage && b != isendMessage))
.AsImplementedInterfaces().InstancePerLifetimeScope();
//自動注冊控制器
builder.RegisterControllers(assemblies);
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
4、編寫測試代碼
public interface IAutoInject{ }
public interface ISendMessage : IAutoInject
{
string SendMessage();
}
public class Phone : ISendMessage
{
public string SendMessage()
{
return "Phone";
}
}
public class Email : ISendMessage
{
public string SendMessage()
{
return "Email";
}
}
public class HomeController : Controller
{
private ISendMessage sendMessage;
public HomeController()
{
}
public HomeController(ISendMessage sendMessage)
{
this.sendMessage = sendMessage;
}
public ActionResult Index()
{
string result = sendMessage.SendMessage();
return View();
}
}
sendMessage.SendMessage()可以正确傳回結果說明依賴注入成功。