当前位置: 首页 > wzjs >正文

医程通 网站做的太旅游seo整站优化

医程通 网站做的太,旅游seo整站优化,山东省个人网站备案,一个网站同时做竞价和seo在C#中,依赖注入(Dependency Injection, DI)是一种实现控制反转(IoC)的设计模式,用于解耦组件依赖关系。以下是基于 .NET Core/ .NET 5 的依赖注入配置详细步骤和用法: 1. 基本概念 服务&#x…

在C#中,依赖注入(Dependency Injection, DI)是一种实现控制反转(IoC)的设计模式,用于解耦组件依赖关系。以下是基于 .NET Core/ .NET 5+ 的依赖注入配置详细步骤和用法:


1. 基本概念

  • 服务(Service):被注入的依赖项(如接口、类)。

  • 容器(Container):管理服务的创建和生命周期(如 IServiceCollection)。

  • 生命周期

    • Transient:每次请求创建新实例。

    • Scoped:同一作用域内共享实例(如一次HTTP请求)。

    • Singleton:全局单例。


2. 配置依赖注入的步骤

步骤1:定义服务接口和实现类
// 定义接口
public interface IMyService
{string GetMessage();
}// 实现接口
public class MyService : IMyService
{public string GetMessage() => "Hello from MyService!";
}
步骤2:注册服务到容器

在 Program.cs 或 Startup.cs(.NET 6+ 通常使用 Program.cs):

var builder = WebApplication.CreateBuilder(args);// 注册服务(生命周期可选)
builder.Services.AddTransient<IMyService, MyService>();      // 瞬时
builder.Services.AddScoped<IMyService, MyService>();         // 作用域
builder.Services.AddSingleton<IMyService, MyService>();      // 单例// 直接注册类(无接口)
builder.Services.AddTransient<MyService>();
步骤3:注入服务到目标类

通过构造函数注入:

public class MyController : ControllerBase
{private readonly IMyService _service;// 构造函数自动注入public MyController(IMyService service){_service = service;}[HttpGet]public IActionResult Get(){return Ok(_service.GetMessage());}
}

3. 在非Web应用(如WPF/控制台)中使用DI

WPF 示例
  1. 安装NuGet包

Install-Package Microsoft.Extensions.DependencyInjection

配置DI容器(在 App.xaml.cs):

public partial class App : Application
{public IServiceProvider ServiceProvider { get; private set; }protected override void OnStartup(StartupEventArgs e){var services = new ServiceCollection();// 注册服务services.AddTransient<IMyService, MyService>();services.AddSingleton<MainWindow>(); // 注册主窗口ServiceProvider = services.BuildServiceProvider();// 解析主窗口并显示var mainWindow = ServiceProvider.GetRequiredService<MainWindow>();mainWindow.Show();}
}

在窗口/ViewModel中注入

public partial class MainWindow : Window
{public MainWindow(IMyService service){InitializeComponent();var message = service.GetMessage(); // 使用注入的服务}
}

4. 高级用法

4.1 注入多个实现(命名或策略模式)
// 注册多个实现
builder.Services.AddTransient<IMyService, ServiceA>();
builder.Services.AddTransient<IMyService, ServiceB>();// 通过 IEnumerable<T> 获取所有实现
public class Consumer
{public Consumer(IEnumerable<IMyService> services){foreach (var service in services){service.DoSomething();}}
}
4.2 使用工厂模式动态创建服务
builder.Services.AddTransient<IMyService>(provider => 
{var config = provider.GetRequiredService<IConfiguration>();return new MyService(config.GetValue<string>("Mode"));
});
4.3 生命周期管理注意事项
  • 避免Singleton依赖Scoped服务:可能导致Captive Dependency问题。

  • IDisposable处理:容器会自动释放实现了 IDisposable 的服务。


5. 常见问题解决

  • 错误:未注册服务

System.InvalidOperationException: No service for type 'IMyService' has been registered.
  • 解决:检查服务是否在 IServiceCollection 中正确注册。

  • 循环依赖
    重构代码以避免构造函数循环引用,或用 Lazy<T> 延迟初始化。


6. 总结表格

操作代码示例说明
注册Transient服务services.AddTransient<IMyService, MyService>();每次请求新实例
注册Scoped服务services.AddScoped<IMyService, MyService>();同一作用域内共享实例
注册Singleton服务services.AddSingleton<IMyService, MyService>();全局单例
构造函数注入public MyClass(IMyService service)自动解析依赖
手动解析服务var service = provider.GetRequiredService<IMyService>();从容器获取实例

通过以上步骤,可以灵活地在C#项目中配置和使用依赖注入,提升代码的可测试性和可维护性。

http://www.dtcms.com/wzjs/411337.html

相关文章:

  • 分析网站建设前期的seo准备工作个人博客网站
  • 网站建设中期检查表怎么写百度云客服人工电话
  • 怎么做网站的关键词库南宁seo公司哪家好
  • 淘宝优惠劵网站建设郑州搜索引擎优化公司
  • 网页小说怎么下载seo网站推广教程
  • 网站集群建设和网站集约化百度关键词搜索排名多少钱
  • 大连百度首页优化seo能从搜索引擎中获得更多的
  • 家具网站开发设计任务书与执行方案十大免费软文推广平台
  • 2018网站流量怎么做百度热搜关键词排名优化
  • 昆明响应式网站制作互联网营销培训班
  • 静态网站建设开发电子商务网站建设多少钱
  • 大气网站欣赏百度快照seo
  • 服装设计图网站seo优化软件
  • 桂林景区网站建设策划方案杭州做搜索引擎网站的公司
  • 无锡阳山镇网站建设百度认证
  • 重庆最新网站备案百度快速收录办法
  • 丹江口网站开发百度广告怎么投放多少钱
  • 青岛网站建设服务器网络广告有哪些
  • asp建网站软文写作方法
  • 广州建设技术职业学院seo大全
  • 网页游戏吃显卡还是cpu百度快照seo
  • 日本 女做视频网站广州seo关键词优化费用
  • 连云港网站建设费用唐山seo排名优化
  • 网站建设 作用自媒体平台排名
  • 手机软件推广平台专业seo服务商
  • 做暧暧视频网站免费免费制作网页平台
  • 东莞东城网站建设seo是什么意思
  • 人事处网站建设绩效目标概述百度网站优化软件
  • 网站怎么做看起来好看体育热点新闻
  • 中国市场调查网广州seo优化推广