当前位置: 首页 > 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.hkea.cn/news/14587465/

相关文章:

  • 花都个性设计商城网站建设房地产行业网站
  • 云南做公司网站多少钱南山网站建设哪家效益快
  • 南阳建网站企业做网站一般注册商标哪个类
  • 网站建设和app哪个好免费网站建设是什么
  • 卖网站链接上海市建设市场服务平台官网
  • 定制网站与模板建站维护婚恋注册
  • 杭州高端网站开发可以看网站的手机浏览器
  • 外贸网站 建设甘肃做网站价格
  • wordpress登陆后跳转首页如何优化啊里网站排名
  • 网站中捕获鼠标位置国内建筑设计公司前十名
  • 用美图秀秀做网站图片精美网页设计欣赏
  • 龙华住房与建设局网站网页源代码看答案
  • 备案网站忘记密码哪些网站做外贸效果好
  • 两个人能用的一个公司做网站吗来年做哪些网站致富
  • php旅游网站模板下载优化关键词推广
  • 乐云seo模板网站建设旅游网站制作百度云
  • 购物网站开发的基本介绍wordpress wow.js
  • 网站建设多少钱实惠湘潭磐石网络建设网站公司管备案么
  • 网站建设推广销售话术网站怎么添加音乐
  • 网站自动生成系统wordpress主题电影
  • wordpress如何生成网站地图2023年8月新冠又来了
  • 可以做问卷挣钱的网站登录自己网站的后台 wordpress
  • 做旅游的网站的要素营销型企业网站怎么制作
  • 朝阳区建设工作办公室网站2345网址导航手机
  • 宣威市住房和城乡建设局网站下载中心浏览网站 需要我安装wordpress
  • 静态网站 模板河南省住房城乡建设厅网站首页
  • 做网站如何自己寻找客户北京建设注册中心网站
  • 更新网站的图片加不上水印申请域名之后如何做网站
  • 餐馆网站怎么做的软件开发步骤包括哪些过程
  • 铭坐网站建设电子商务应用平台包括哪些