ioc autofac简单示例
1.winform用法:
nuget安装autofac
public interface ILog { bool Log(string msg); } public class TXTLogger : ILog { public bool Log(string msg) { Console.WriteLine(msg + " saved in file log.log"); return true; } } public class DBLogger : ILog { public bool Log(string msg) { Console.WriteLine(msg + " saved in mssqlserver"); return true; } } public class UserService { public ILog log; public UserService(ILog ilog) //构造函数注入 { log = ilog; } public bool AddUser() { log.Log("insert user succeed ,userId is :1"); return true; } }
Autofac.IContainer container; private void Form1_Load(object sender, EventArgs e) {//注册 ContainerBuilder builder = new ContainerBuilder(); builder.RegisterType<DBLogger>().As<ILog>(); builder.RegisterType<TXTLogger>().As<ILog>();//后注册的会覆盖之前注册的 builder.RegisterType<UserService>(); container = builder.Build(); Test(); } void Test() {
var service = container.Resolve<UserService>(); //解析;并没有实例化new UserService也没有传入构造函数参数,autofac自动注入了
if (service!=null)
{
var result = service.AddUser(); //输出insert user succeed ,userId is :1 saved in file log.log
}
}
2.mvc用法:
安装 autofac和autofac.mvc5:
global.asax.cs中
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); //mvc注册 参考:http://www.w2*bc.com/article/180590 ContainerBuilder builder = new ContainerBuilder(); builder.RegisterControllers(Assembly.GetExecutingAssembly()).AsSelf().PropertiesAutowired(); builder.RegisterType<DBLogger>().As<ILog>().InstancePerLifetimeScope(); builder.RegisterType<TXTLogger>().As<ILog>().InstancePerLifetimeScope();//后注册的会覆盖之前注册的 builder.RegisterType<UserService>().InstancePerLifetimeScope(); var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
//webapi注册
//WebApi Register //builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).AsSelf().PropertiesAutowired(); //builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration); /builder.RegisterWebApiModelBinderProvider();
}
controller中调用Test方法
public static void Test() { //var log = DependencyResolver.Current.GetService<ILog>(); //var result = log.Log("test msg"); var service = DependencyResolver.Current.GetService<UserService>(); if (service != null) { service.AddUser(); //输出insert user succeed ,userId is :1 saved in file log.log } }
参考:http://www.cnblogs.com/hkncd/archive/2012/11/21/2780041.html
参考:http://www.w2b*c.com/article/180590
3.属性注入:
public class AA { public BB bb; public AA() { } public void TestAA() { bb.TestBB(); } } public class BB { public void TestBB() { Console.WriteLine("TestBB Executed!"); } }
ContainerBuilder builder = new ContainerBuilder(); builder.RegisterType<BB>(); builder.Register(c => new AA() { bb = c.Resolve<BB>() }); //属性注入 var container = builder.Build();
var a = container.Resolve<AA>(); a.TestAA(); //输出:TestBB Executed!
From:http://www.cnblogs.com/xuejianxiyang/p/7064974.html
作者:xuejianxiyang
出处:http://xuejianxiyang.cnblogs.com
关于作者:Heaven helps those who help themselves.
本文版权归原作者和博客园共有,欢迎转载,但未经原作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。