ASP.NET Core 是按照支持和使用依赖注入设计的 。ASP.NET Core应用程序可以使用用内置搭建框架服务,这些服务在 Startup 类的方法中被注入到应用程序中并且应用程序服务也能够配置注入。
由 ASP.NET Core 生成的默认服务容器提供了最小功能集并且不是要取代其他容器。
依赖注入(Dependency injection,DI)是一种实现对象及其合作者或依赖项之间松散耦合的技术。
注册你自己的服务
你可以按照如下方式注册你自己的应用程序服务。第一个泛型类型表示将要从容器中请求的类型(通常是一个接口)。第二个泛型类型表示将由容器实例化并且用于完成这些请求的具体类型。
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
服务的生命周期和注册选项
ASP.NET服务可以配置为以下几种生命周期:
Transient:瞬态
瞬态的生命周期在每次服务需要时都会创建一次。最适合轻量级的、无状态的服务。
Scoped:作用域
在当前作用域内,不管调用多少次,都是一个实例,换了作用域就会再次创建实例,类似于特定作用内的单例。
Singleton:创建一个单例,以后每次调用的时候都返回该单例对象。
1定义接口
public interface ICharacterRepository
{
IEnumerable<User> ListAll();
void Add(User character);
string CeshiMethod();
}
2定义实现类
public class CharacterRepository : ICharacterRepository
{
private readonly ApplicationDbContext _dbContext;
public CharacterRepository(ApplicationDbContext dbContext)
{
_dbContext = dbContext;
}
public IEnumerable<User> ListAll()
{
return _dbContext.users.AsEnumerable();
}
public void Add(User character)
{
_dbContext.users.Add(character);
_dbContext.SaveChanges();
}
public string CeshiMethod()
{
return "This is ceshi";
}
}
实现类中的ApplicationDbContext是注册的数据库上下文,在系统启动文件中注册
:
services.AddDbContext<ApplicationDbContext>(options =>
options.UseInMemoryDatabase());
3注册刚才定义的 ICharacterRepository为依赖注入,还是在系统启动文件中注册
services.AddScoped<ICharacterRepository, CharacterRepository>();
4在控制器中调用
public class CharactersController : Controller
{
private readonly ICharacterRepository _characterRepository;
public CharactersController(ICharacterRepository characterRepository)
{
_characterRepository = characterRepository;
}
// GET: /characters/
public IActionResult Index()
{
var characters = _characterRepository.ListAll().ToList();
return View(characters);
}
}
在构造函数中声明ICharacterRepository,通过依赖注入实际系统运行中实例化的是CharacterRepository类。
网友评论