​回到目录​

在使用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方法被正确返回了。

​回到目录​

 

作者:仓储大叔,张占岭,
荣誉:微软MVP