回到目录
在使用autofac这个DI工具时,我们一般使用的是构造方法注入,而dotnetcore的标准框架里也集成了构造方法注入,而属性注入在一些场景下,表现的更为灵活,像java的spring框架里就有@Autowired注解来实现属性的注入,而autofac这个框架也提示了属性自动注入的方式(PropertiesAutowired)。
下面准备dao和bll层代码,bll对dao层有引用
??public class UserRepository ???????{ ???????????public int GetUserId() ???????????{ ???????????????return 1; ???????????} ???????} ???????public class UserService ???????{ ???????????public UserRepository _userRepository { get; set; } ???????????public int GetUserId() ???????????{ ???????????????if (_userRepository != null) ???????????????{ ???????????????????return _userRepository.GetUserId(); ???????????????} ???????????????return 0; ???????????} ???????}
在单元测试里进行属性注入的验证
???????[Fact] ???????public void Test1() ???????{ ???????????ContainerBuilder builder = new ContainerBuilder(); ???????????builder.RegisterType<UserService>().PropertiesAutowired();//它里面的属性自动注册 ???????????builder.RegisterType<UserRepository>(); ???????????var container = builder.Build(); ???????????UserService userService = container.Resolve<UserService>(); ???????????Assert.Equal(1, userService.GetUserId()); ???????}
经过测试我们发现,dao层的GetUserId方法被正确返回了。
回到目录
DotNetCore跨平台~autofac属性的自动注入
原文地址:https://www.cnblogs.com/lori/p/8744215.html