項目中先在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();
    }
}

本文转载:CSDN博客