设为首页 加入收藏

TOP

AutoFac使用方法总结一:注册(二)
2019-09-17 18:54:45 】 浏览:62
Tags:AutoFac 使用方法 总结 注册
()
3 { 4 var containerBuilder = new ContainerBuilder(); 5 containerBuilder.RegisterType<DbRepository>().As<IRepository>(); 6 containerBuilder.RegisterType<TestRepository>().As<IRepository>(); 7 8 IContainer container = containerBuilder.Build(); 9 var repository = container.Resolve<IRepository>(); 10 Assert.Equal(typeof(TestRepository), repository.GetType()); 11 }

如果不想覆盖的话,可以用PreserveExistingDefaults,这样会保留原来注册的实现。

 1  [Fact]  2     public void register_order_defaults()  3  {  4         var containerBuilder = new ContainerBuilder();  5         containerBuilder.RegisterType<DbRepository>().As<IRepository>();  6         containerBuilder.RegisterType<TestRepository>().As<IRepository>().PreserveExistingDefaults();  7 
 8         IContainer container = containerBuilder.Build();  9         var repository = container.Resolve<IRepository>(); 10         Assert.Equal(typeof (DbRepository), repository.GetType()); 11     }

可以用Name来区分不同的实现,代替As方法

 1  [Fact]  2     public void register_with_name()  3  {  4         var containerBuilder = new ContainerBuilder();  5         containerBuilder.RegisterType<DbRepository>().Named<IRepository>("DB");  6         containerBuilder.RegisterType<TestRepository>().Named<IRepository>("Test");  7 
 8         IContainer container = containerBuilder.Build();  9         var dbRepository = container.ResolveNamed<IRepository>("DB"); 10         var testRepository = container.ResolveNamed<IRepository>("Test"); 11         Assert.Equal(typeof(DbRepository), dbRepository.GetType()); 12         Assert.Equal(typeof(TestRepository), testRepository.GetType()); 13     }

如果一个类有多个构造函数的话,可以在注册时候选择不同的构造函数

 1  [Fact]  2     public void choose_constructors()  3  {  4         var builder = new ContainerBuilder();  5         builder.RegisterType<MyParameter>();  6         builder.RegisterType<MyClass>().UsingConstructor(typeof (MyParameter));  7         IContainer container = builder.Build();  8         var myClass = container.Resolve<MyClass>();  9  Assert.NotNull(myClass); 10     }

AutoFac可以注册一个Assemble下所有的类,当然,也可以根据类型进行筛选

 1  [Fact]  2     public void register_assembly()  3  {  4         var builder = new ContainerBuilder();  5  builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).  6             Where(t => t.Name.EndsWith("Repository")).  7  AsImplementedInterfaces();  8 
 9         IContainer container = builder.Build(); 10         var repository = container.Resolve<IRepository>(); 11  Assert.NotNull(repository); 12     }

 

参考链接:http://niuyi.github.io/blog/2012/04/06/autofac-by-unit-test/

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇线性一致性与全序广播------《Des.. 下一篇MapReduce与批处理------《Design..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目