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

百度推广智能网站企业网站建设合作合同

百度推广智能网站,企业网站建设合作合同,前端开发培训机构怎么样,躺平设计家官网依赖注入#xff08;Dependency Injection#xff0c;简称DI#xff09;是为了实现各个类之间的依赖的控制反转#xff08;Inversion of Control#xff0c;简称IoC #xff09;。 ASP.NET Core 中的Controller 和 Service 或者其他类都支持依赖注入。 依赖注入术语中Dependency Injection简称DI是为了实现各个类之间的依赖的控制反转Inversion of Control简称IoC 。 ASP.NET Core 中的Controller 和 Service 或者其他类都支持依赖注入。 依赖注入术语中 Service 是一个为其他对象提供服务的类**。 Service 不是一个Web Service与Web Service无关。 Service的使用方法一般是 在Main函数中注册Register到容器中可以使用ASP.NET Core 内置的容器或者第三方容器比如Autofac。在注册过的类的构造函数中即可将其他依赖类当作入参Resolve。或者通过IServiceScopeFactory 来Resolve。容器负责Dispose。 比如 定义接口 public interface IMyDependency {void WriteMessage(string message); }定义实现类 public class MyDependency : IMyDependency {public void WriteMessage(string message){Console.WriteLine($MyDependency.WriteMessage Message: {message});} }在Services容器中注册类 var builder WebApplication.CreateBuilder(args); builder.Services.AddScopedIMyDependency, MyDependency(); builder.Services.AddScopedPageModel, IndexModel(); var app builder.Build(); app.Run();使用构造函数Resolve依赖对象 public class IndexModel : PageModel {private readonly IMyDependency myDependency;public IndexModel(IMyDependency myDependency){myDependency myDependency; } }这样不用在IndexModel 内部再new一个IMyDependency 类的对象而是使用构造函数传入的对象。 而由容器来维护创建Service的对象的生命周期这个过程叫做Resolve对象共有3种生命周期 Transient每次Resolve的时候都重新创建即使在同一个Http Reuest中。Scoped每次Http Reuest中Resolve的时候重新创建在该请求中不变。Singleton第一次Resolve的时候创建后续Resolve都使用相同的对象。Singleton 的Service必须线程安全因为所有线程都要用到并且要考虑内存的用量。 注意不应该在Singleton Service中Resolve Scoped类型的对象反过来可以因为可能导致Scoped类型的对象无法dispose。 使用IServiceScopeFactory 实现Resolve依赖对象 public class IndexModel : PageModel {private readonly IServiceScopeFactory serviceScopeFactory;public IndexModel(IServiceScopeFactory serviceScopeFactory){serviceScopeFactory serviceScopeFactory; }public DoSomething(){using (var scope serviceScopeFactory .CreateScope()){// resolve a database connectionvar db scope.ServiceProvider.GetServiceIDatabaseConnection();// do something with it} } }注册一组Service类似实现一个 builder.Host.UseSerilog();需要写一个ServiceCollection的扩展类然后在实现中注册相关的类 namespace Microsoft.Extensions.DependencyInjection {public static class MyConfigServiceCollectionExtensions{public static IServiceCollection AddConfig(this IServiceCollection services, IConfiguration config){services.ConfigurePositionOptions(config.GetSection(PositionOptions.Position));services.ConfigureColorOptions(config.GetSection(ColorOptions.Color));return services;}public static IServiceCollection AddMyDependencyGroup(this IServiceCollection services){services.AddScopedIMyDependency, MyDependency();services.AddScopedIMyDependency2, MyDependency2();return services;}} }然后就可以这样注册了 builder.Services.AddConfig(builder.Configuration).AddMyDependencyGroup();如何设计项目中的依赖Service 应当避免有状态的静态的类。应当避免地App中创建全局对象而应该使用singleton services。应当避免直接在service中初始化依赖的类这样会增加耦合。应当保证service功能单一以便测试。如果类中有大量的依赖注入说明这个类的功能过于复杂应当拆分使其单一职责。 Service的Dispose Singleton类型的 Service 不应该添加Dispose方法App结束进程时会自动dispose。Scoped和Transient类型的Service 应该添加Dispose方法容器会自动调用。 其余建议 不支持 async/await 注入因为C#不支持async构造函数。不直接在容器中持久保存数据。配置项应该使用options pattern。不应该static访问service。尽量让DI工厂的操作同步快速。通在构造函数中注入的时候不应该使用 service locator pattern。配置service的时候不应该调用 BuildServiceProvider而只应该在注册B service时需要resolve A service的时候才用。开启Scope validation避免scoped service中使用singletons service。container 直接resolve service可能会导致内存泄露比如 static void TransientDisposablesWithoutDispose() {var services new ServiceCollection();services.AddTransientExampleDisposable();ServiceProvider serviceProvider services.BuildServiceProvider();for (int i 0; i 1000; i){_ serviceProvider.GetRequiredServiceExampleDisposable();}//1,000 个对象会被创建serviceProvider 不dispose这1000个对象就不dispose。 }
http://www.w-s-a.com/news/893119/

相关文章:

  • 建网络商城网站wordpress关于
  • 专业网站建设分类标准重庆网站开发哪家专业
  • 织梦的网站关键词如何自己搭建微信小程序
  • 怎么做基金公司网站韩都衣舍网站建设ppt
  • 外贸网站模板aspnet网站开发 视频
  • 上海植物租赁做网站南浔网站建设
  • 怎么做学校网站做兼职工作上哪个网站招聘
  • 软件下载网站哪个比较好杭州开发小程序
  • 做网站都用什么技术学做名片的网站
  • 备案网站忘记密码乐装网
  • 电商扶贫网站建设淄博网站建设小程序
  • 网站群建设代理丰城网站建设公司
  • 青岛网站建设服务器wordpress迁移跳转原网站
  • 泰安网站建设哪里有公司如何注册网站
  • 做网站开专票税钱是多少个点上海市有哪些公司
  • 寿县有做网站开发的吗宁波网站建设方式
  • 网站建设和网站推广服务器怎么发布网站
  • 比较好的摄影网站雅安市政建设公司网站
  • 网站与微信区别wordpress 站内信
  • 宁夏网站开发设计说明书源码下载脚本之家
  • 邱县做网站百度搜索排名机制
  • 运城个人网站建设智慧团建系统官方网站登录
  • 公司营业执照可以做几个网站一家专门做母婴的网站
  • 网站建设商标属于哪个类别搜狗seo快速排名公司
  • 织梦做商城网站企业网络建站
  • 网站后期维护都有什么wordpress首页加图片
  • 展会网站怎么做网页设计与制作教程版徐洪亮课后答案
  • 石景山网站建设设计公司建设网站怎么建立服务器
  • 本地生活服务平台app网站关键词优化原理
  • 建网站的公司叫什么重庆论坛建站模板