項目中先在web項目裡面引用Autofac.Mvc5
項目結構
在Global.asax裡面注入類
using Autofac;
using Autofac.Integration.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace WebApplicationAutofac
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
//實例化容器構建器
var builder = new ContainerBuilder();
//由於是在web項目裡面引用的autofac,所以注入也在這層,加載程序集BLL和Data需要引用
//不然Assembly.Load加載不到當前bin目錄裡面的Data層的dll
//也可以不引用,需要手動將Data層的dll複製到web裡面的bin
Assembly asseambly_BLL = Assembly.Load("WebApplicationAutofac.BLL");
Assembly asseambly_Data = Assembly.Load("WebApplicationAutofac.Data");
//註冊controller
builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired().InstancePerLifetimeScope();
//接口注入
builder.RegisterAssemblyTypes(asseambly_BLL).AsImplementedInterfaces().PropertiesAutowired().InstancePerLifetimeScope();
//類注入
builder.RegisterAssemblyTypes(asseambly_Data).AsSelf().PropertiesAutowired().InstancePerLifetimeScope();
var container = builder.Build();
//注入點
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
}
}
public interface IUserInfoBLL
{
/// <summary>
/// 獲取用戶姓名
/// </summary>
/// <returns></returns>
string GetUserName();
}
public class UserInfoBLL : IUserInfoBLL
{
//屬性注入
public UserInfoData _userdata { get; set; }
public string GetUserName()
{
return _userdata.GetUserName();
}
}
public class UserInfoData
{
/// <summary>
/// 獲取用戶姓名
/// </summary>
/// <returns></returns>
public string GetUserName()
{
return "歐陽修";
}
}
public class HomeController : Controller
{
//屬性注入
public IUserInfoBLL _userBLL { get; set; }
public ActionResult Index()
{
ViewBag.name = _userBLL.GetUserName();
return View();
}
}