程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Autofac的注入和web.config配合,autofacweb.config

Autofac的注入和web.config配合,autofacweb.config

編輯:C#入門知識

Autofac的注入和web.config配合,autofacweb.config


public static void BuildMvcContainer()
        {
            var builder = new ContainerBuilder();
            var assemblys = AppDomain.CurrentDomain.GetAssemblies().ToList();

            //拆分DLL後需要注冊,需要注入的DLL
            Assembly[] asm = GetAllAssembly("*.Controllers.dll").ToArray();
            builder.RegisterAssemblyTypes(asm);
       //讀取web.config中配置的值 
            builder.RegisterModule(new ConfigurationSettingsReader("autofac"));
            
            var container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }
        #region 加載程序集
        private static List<Assembly> GetAllAssembly(string dllName)
        {
            List<string> pluginpath = FindPlugin(dllName);
            var list = new List<Assembly>();
            foreach (string filename in pluginpath)
            {
                try
                {
                    string asmname = Path.GetFileNameWithoutExtension(filename);
                    if (asmname != string.Empty)
                    {
                        Assembly asm = Assembly.LoadFrom(filename);
                        list.Add(asm);
                    }
                }
                catch (Exception ex)
                {
                    Console.Write(ex.Message);
                }
            }
            return list;
        }
        //查找所有插件的路徑
        private static List<string> FindPlugin(string dllName)
        {
            List<string> pluginpath = new List<string>();
           
                string path = AppDomain.CurrentDomain.BaseDirectory;
                string dir = Path.Combine(path, "bin");
                string[] dllList = Directory.GetFiles(dir, dllName);
                if (dllList.Length > 0)
                {
                    pluginpath.AddRange(dllList.Select(item => Path.Combine(dir, item.Substring(dir.Length + 1))));
                }
            return pluginpath;
        }
        #endregion

上面的代碼就是注冊的代碼,我是在MVC4使用,寫完之後再Global.asax中的Application_Start調用,確保啟動應用後執行

然後是web.config中配置

  <autofac configSource="Configuration\autofac.config" />

我web.config中引用一個文件,詳細看我之前的博文

<?xml version="1.0" encoding="utf-8"?>
<autofac>
  <components>
    <component  type="Cactus.Service.TestServer, Cactus.Service" service="Cactus.IService.TestInterface,Cactus.IService" />
    <component  type="Cactus.Service.SiteConfigService, Cactus.Service" service="Cactus.IService.ISiteConfigService,Cactus.IService" />
    <component  type="Cactus.Service.ActionGroupServer, Cactus.Service" service="Cactus.IService.IActionGroupServer,Cactus.IService" />
    <component  type="Cactus.Service.ActionServer, Cactus.Service" service="Cactus.IService.IActionServer,Cactus.IService" />
    <component  type="Cactus.Service.RoleServer, Cactus.Service" service="Cactus.IService.IRoleServer,Cactus.IService" />
    <component  type="Cactus.Service.UserServer, Cactus.Service" service="Cactus.IService.IUserServer,Cactus.IService" />
  </components>
</autofac>

然後在autofac.config中注冊服務,type是實現的server,service是接口

在MVC中的使用,根據的是構造函數注入

public class AdminLoginController : Controller
    {
        public readonly IUserServer userServer;
        public AdminLoginController(IUserServer userServer)
        {
            this.userServer = userServer;
        }
        public ActionResult Index()
        {
            userServer.xxxxx//隨便寫
            return View();
        }
}

 屬性注入可以參考這篇文章http://www.cnblogs.com/peteryu007/p/3449315.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved