码迷,mamicode.com
首页 > 其他好文 > 详细

Autofac 使用经验

时间:2017-09-16 20:39:07      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:color   sse   auto   class   container   经验   实例   特定   enc   

慢慢总结

基础使用样例,在 Application_Start 中直接使用

            //autofac注册
            var builder = new ContainerBuilder();
            //注册Controller方式一  自己指定程序集
            //var assemblies = new List<Assembly> { Assembly.Load("TestEf.Web") };
            //builder.RegisterControllers(assemblies.ToArray());
            //注册Controller方式二  当前执行项目的程序集
            builder.RegisterControllers(Assembly.GetExecutingAssembly());
            //注册泛型类使用 RegisterGeneric
            builder.RegisterGeneric(typeof(EfRepository<>)).As(typeof(IRepository<>)).InstancePerLifetimeScope();
            builder.Register<IDbContext>(c => new TestEfContext()).InstancePerLifetimeScope();
            //注册普通类使用 RegisterType
            builder.RegisterType<ArticleService>().As<IArticleService>().InstancePerLifetimeScope();
            var container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

① 注册 Controller

方式一:

//注册Controller方式一  自己指定程序集
var assemblies = new List<Assembly> { Assembly.Load("TestEf.Web") };
builder.RegisterControllers(assemblies.ToArray());

方式二:

//注册Controller方式二  当前执行项目的程序集
builder.RegisterControllers(Assembly.GetExecutingAssembly());

② 常用接口注册方式

方式一:泛型注册使用  RegisterGeneric

builder.RegisterGeneric(typeof(EfRepository<>)).As(typeof(IRepository<>)).InstancePerLifetimeScope();

方式二:普通类型使用 RegisterType

builder.RegisterType<ArticleService>().As<IArticleService>().InstancePerLifetimeScope();

③生命周期

 InstancePerDependency  默认值,每次解析时都会得到一个新的实例

SingleInstance 单例 每次解析都会得到同一个实例

InstancePerLifetimeScope 同一生命周期内得到相同的实例

InstancePerMatchingLifetimeScope  同一生命周期升级版,可以指定与某个生命周期获取获取相同的实例

InstancePerRequest  根据Request请求来确定,在一个web/http/api的上下文中共享一个组件实例

Thread Scope 线程内共享,没有特定的方法,可以根据 InstancePerMatchingLifetimeScope 来实现

④使用

方式一:在静态方法中,没有构造函数来进行注册

var _articleService = DependencyResolver.Current.GetService<IArticleService>();

 

Autofac 使用经验

标签:color   sse   auto   class   container   经验   实例   特定   enc   

原文地址:http://www.cnblogs.com/ideacore/p/7532041.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!