public static void BuildMvcContainer() { var builder = new ContainerBuilder(); var assemblys = AppDomain.CurrentDomain.GetAssemblies().ToList(); //拆分DLL后需要注冊(cè),需要注入的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
上面的代碼就是注冊(cè)的代碼,我是在MVC4使用,寫(xiě)完之后再Global.asax中的application_Start調(diào)用,確保啟動(dòng)應(yīng)用后執(zhí)行
然后是web.config中配置
<autofac configSource="Configuration/autofac.config" />
我web.config中引用一個(gè)文件,詳細(xì)看我之前的博文
<?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中注冊(cè)服務(wù),type是實(shí)現(xiàn)的server,service是接口
在MVC中的使用,根據(jù)的是構(gòu)造函數(shù)注入
public class AdminLoginController : Controller { public readonly IUserServer userServer; public AdminLoginController(IUserServer userServer) { this.userServer = userServer; } public ActionResult Index() { userServer.xxxxx//隨便寫(xiě) return View(); }}屬性注入可以參考這篇文章http://www.survivalescaperooms.com/peteryu007/p/3449315.html
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注