依赖注入是一种常用的设计模式,用于解耦组件之间的依赖关系。通过依赖注入,我们可以将一个组件所依赖的其他组件的创建和管理工作交给容器来完成,从而实现组件之间的解耦和灵活性
.NET Core提供了内置的依赖注入容器,使我们能够轻松地实现依赖注入。下面是使用依赖注入的步骤:
定义接口
定义一个接口
ICacheUtil
csharp
namespace Snblog.Cache.CacheUtil
{
public interface ICacheUtil
{
public T CacheNumber<T>(string key, T value);
public T CacheString<T>(string key, T value);
}
}
接口实现类
CacheUtil
csharp
using Snblog.Cache.Cache;
namespace Snblog.Cache.CacheUtil
{
public class CacheUtil:ICacheUtil
{
public T CacheNumber<T>(string key, T value)
{
// 实现具体的逻辑
}
public T CacheString<T>(string key, T value)
{
// 实现具体的逻辑
}
}
}
注册服务
接下来,需要在依赖注入容器中注册服务。这样,当我们需要使用该服务时,容器将自动创建并提供相应的实例。
.NET Core中,在Startup.cs
文件的ConfigureServices
方法中进行服务注册。例如,我们可以将IMyService
接口和MyService
实现类注册为服务:
ConfigureServices
csharp
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<ICacheUtil,CacheUtil>();
}
使用依赖注入
csharp
private readonly CacheUtil _cacheUtil;
public SnArticleService(ICacheUtil cacheUtil)
{
_cacheUtil = (CacheUtil) cacheUtil;
}
public IActionResult Index()
{
_cacheUtil.CacheString("Teset");
return View();
}
属性注入
csharp
[Inject]
private readonly CacheUtil _cacheUtil;
public IActionResult Index()
{
_cacheUtil.CacheString("Teset");
return View();
}
生命周期
.NET Core DI 为我们提供的实例生命周期包括三种:
- Transient: 每一次GetService都会创建一个新的实例
- Scoped: 在同一个Scope内只初始化一个实例 ,可以理解为( 每一个request级别只创建一个实例,同一个http request会在一个 scope内)
- Singleton :整个应用程序生命周期以内只创建一个实例