和web.config配合

王朝学院·作者佚名  2016-05-20
窄屏简体版  字體: |||超大  

Autofac的注入和web.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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航